2016-12-12 2 views
0

Ich finde Firebase-Datenbank sample sehr hilfreich, aber ich bemerkte etwas, das mich ein bisschen beunruhigt.Verschachtelung Sterne in Firebase Datenbank

Ich meine in diesem Beispiel Benutzer kann Stern auf die Post geben, so etwas wie "Gefällt mir" auf Facebook. In bereitgestellten Beispiel verschachtelt sie Sterne in Post, so haben wir Probe Objekt wie folgt:

"post_id" : { 
     "author": "username", 
     "body": "Some content", 
     "starCount": 1 
     "stars" : { 
       "user_id_who_gave_star" : "true" 
     } 
     "title": "Some title", 
     "uid": "author_id" 
} 

Eine solche Lösung hat viele Vorteile, wie zum Beispiel Wir können prüfen, ob bereits ein Sternsymbol vorhanden ist, oder ob wir das Symbol ändern oder ändern, oder wir können in einer Transaktion "starCount" ändern und den nächsten Wert zu "stars" hinzufügen.

Aber das Problem ist, wenn wir große Anwendung haben und 1000 Benutzer gab Stern, so dass jedes Mal, wenn wir Post-Daten herunterladen wir 1000 UserIDs herunterladen, die möglicherweise nicht die beste Lösung sein.

Frage

Meine Frage ist, was für solche Anwendungen beste Ansatz ist, und jemand getestet haben, wie Firebase funktioniert in dieser Situation?

Antwort

1

firebaser hier

Wenn die Beispiele für unsere Dokumentation zu schreiben, wir immer die Notwendigkeit zum Ausgleich haben genügend Zusammenhang mit, hält das Beispiel klein genug, und nach eigenem Best Practices.

Dies ist in der Tat einer der Fälle, in denen wir gegen eine unserer eigenen bewährten Methoden verstoßen, "Daten nicht zu verschachteln". Wie Sie gesagt haben: Das bedeutet, dass ein Benutzer, der einen Beitrag herunterlädt, alle UIDs von Benutzern erhält, denen dieser Beitrag gefallen hat.

Wie die Verwendung der Anwendungsskalen, kann dies ein Anliegen werden. Wenn das der Fall für Ihre Anwendung ist, sollten Sie die „Benutzer, die einen Beitrag upvoted“ -Modell als separater Knoten der obersten Ebene:

"posts": { 
    "post_id" : { 
     "author": "username", 
     "body": "Some content", 
     "starCount": 1 
     "title": "Some title", 
     "uid": "author_id" 
    } 
}, 
"upvotes": { 
    "post_id" : { 
     "user_id_who_gave_star" : "true" 
    } 
} 
+0

Aber jetzt können wir nicht sofort angezeigt werden, wenn der Benutzer Stern auf bestimmte Post gibt, Gibt es andere Lösungen? – ThirdMartian