Ich versuche zu entscheiden, wie Sie die Daten für das folgende Szenario am besten strukturieren können. Ich habe 10000 Schafe auf einem Bauernhof mit 50 miteinander verbundenen Feldern. Ich verfolge jedes Schaf, wenn sie ein Feld betreten und verlassen. Ich möchte in die Lage:Firebase-Datenstruktur für Echtzeit-Snapshot und retrospektive Analyse
- retrospektiv jedes Schafs Bewegung über einen Zeitraum gegebenen Zeit analysieren
- Ich mag auch jedes Feld der Nutzung im Laufe der Zeit kenne
- sofort analysieren, welches Feld jedes gegebenes Schaf ist zur Zeit in
- sofort wissen, welche Schafe sind in einem bestimmten Bereich
ich die documentation über gelesen habe de-Normalisierung der Daten, und ich schätze, dass ich alles Abfragen mit tun können, usw.
Meine Frage ist: Soll ich die Eingangs-/Ausgangsdaten Schafe & Feldknoten duplizieren wie dies ?:
{
sightings: {
uniqueSheepId: {
FirebaseAutoId: {
type: enter
fieldId: uniqueFieldId
timestamp: xxxxxxxx.xxxxx
}
}
}
}
UND
{
sightings: {
uniqueFieldId: {
FirebaseAutoId: {
type: enter
sheepId: uniqueSheepId
timestamp: xxxxxxxx.xxxxx
}
}
}
}
Dieses wie ein guter Weg scheint für eine Echtzeit bekommen Momentaufnahme, wie viele Schafe in einem bestimmten Feld sind. Es erlaubt uns auch leicht zu sehen, wo ein Schaf gerade ist und wo es gewesen ist, ohne irgendwelche Fragen zu stellen. Offensichtlich wird die Größe des Datasets doppelt so groß wie bei Abfragen, aber überwiegt die Einfachheit der Datengewinnung die Kosten für die Speicherung der Daten?
Ich habe die Chatroom/Mitglieder-Beispiele auf SO gesehen (und verstanden), aber ich glaube, dass mein Wunsch, die Mitgliedschaft/Nutzung von den Schaf- und Feldperspektiven rückblickend zu analysieren, meine Frage leicht von diesen Antworten unterscheidet. Jeder Rat wäre großartig.
Danke dafür. Ich verstehe, was Sie vorschlagen und kann sehen, wie es die Anforderungen stellt, die ich eingestellt habe. Es scheint jedoch "relational" in dem Sinne zu sein, dass ich "Sichtungen" filtern muss, um Details der Sichtungen eines bestimmten Schafs (oder Feldes) basierend auf den Kindern in "Schafen/uniqueSheepId/Sichtungen" zu erhalten. Da ich dies nachschlagen muss, fühlt es sich so an, als wäre es nicht viel schlimmer, einfach nach '/ Sichtungen' für Kinder zu suchen, die' sheepId == uniqueSheepId' haben und die Referenzen in '/ sheep/uniqueSheepId/Sichtungsknoten. Speichern Sie eine Liste von Referenzen viel effizienter? – James
Es ist alles abhängig. Einige meiner empfohlenen Abfragen erfordern Daten aus einer vorherigen Abfrage. Aber Ihre Abfragen würden einen viel größeren Baum durchforsten und das könnte genauso viel Zeit wie 2 kleinere Abfragen dauern. Ich habe meine Frage bearbeitet, den Anfang gelesen. – theblindprophet
Danke für diese Klarstellung. Ich denke, dies ist ein "$$$ Kosten für das Speichern von normalisierten Daten vs Zeit Kosten einer Abfrage" Problem. Da die Sichtungsdaten nur einmal geschrieben werden (d. H. Sie werden nie aktualisiert), erscheint es nicht allzu problematisch, sie gleichzeitig an zwei Orten (Schaf und Feld) zu schreiben. Die Kosten für Firebase scheinen für diesen Anwendungsfall ziemlich angemessen zu sein. BTW Ich werde definitiv Ihre currentField & numberOfSheep "counter" -Eigenschaften zu meiner Datenstruktur hinzufügen - danke auch dafür. – James