Ich habe die Firebase-Echtzeitdatenbank für meine App für soziale Netzwerke verwendet, in der Sie folgen und Beiträge von Personen erhalten können, denen Sie folgen.
Meine Datenbank:
Users
--USER_ID_1
----name
----email
--USER_ID_2
----name
----email
Posts
--POST_ID_1
----image
----userid
----date
--POST_ID_2
----image
----userid
----date
Timeline
--User_ID_1
----POST_ID_2
------date
----POST_ID_1
------date
Ein weiterer Knoten „Content“ enthielt die ID aller Benutzerbeiträge. Wenn “A” auf “B” folgte, wurden alle Post-IDs von B zur Chronik von A hinzugefügt. Und wenn B etwas gepostet hat, wird es auch zu allen Timelines seiner Follower hinzugefügt.
Es hat Skalierbarkeitsprobleme:
- Wenn jemand 10.000 Follower hat, wurde ein neuer Beitrag zu den Timelines aller 10.000 Follower hinzugefügt.
- Wenn jemand viele Beiträge hat, erhält jeder neue Follower alle in seiner Chronik.
Ich möchte zu Firestore wechseln, da angeblich skalierbar ist. Wie sollte ich meine Datenbank strukturieren, damit diese Probleme in Echtzeitdatenbanken in Firestore eliminiert werden?
Haftungsausschluss: Ich habe nur die Firestore-Dokumente gelesen. Da Firestore viel bessere Abfragen hat als Firebase-realtime-db, müssen Sie keine Daten mehr kopieren. Was ich also tun würde, ist: Wenn ein Benutzer auf seine Zeitachse schaut, erstelle eine Firestore-Abfrage, die besagt
give me all posts which are from the people i follow
. So etwas wie: posts.where(user== john OR mark OR katy OR …). Ich gehe davon aus, dass so etwas funktioniert. Falls ich Zeit habe, es zu versuchen, lasse ich es dich wissen.– Jürgen Brandstetter
16. November 2017 um 11:21 Uhr
@jurgenBrandstetter Firestore unterstützt derzeit kein ‘ODER’ und wenn dies der Fall wäre, würde auch Ihre Methode nicht funktionieren. Angenommen, jemand hat 1000 Follower, dann muss ich 1000 ODER-Aussagen machen.
– Zikus
18. November 2017 um 4:35 Uhr
Ich dachte, vielleicht geben Sie in Ihrem Dokument die ID der Person ein, die Ihnen folgt. Zum Beispiel folgt UserA auf UserB, dann setzen Sie im Postdokument von UserB UserAID = true. Wenn Sie also die Abfrage durchführen, lautet sie so etwas wie == postDocRef.where(UserAID=true), aber ich weiß nicht, ob ein Dokument in Firestore bis zu einer Million Follower unterstützen kann
– Giovanny Pineros
18. Mai 2018 um 19:14 Uhr
@Zicsus Nehmen wir dieses Beispiel an. Ich habe 10 000 Beiträge geschrieben. Jetzt folgst du mir. Sie können die Posts nach Zeitstempel ordnen und dann auf eine bestimmte Anzahl beschränken, z. B. 15 Posts, und die .childAdded-Methode verwenden. Um mehr Daten in der gleichen chronologischen Reihenfolge zu laden, könnten Sie eine Methode mit einem Beobachter des Typs: ObserveSingleEvent(ofType:Value) mit einem Limit von 10 Posts erstellen. Implementieren Sie dann eine Pull-to-Refresh-Funktion in Ihrer Tabellenansicht oder verwenden Sie den Scroll-View-Offset, und wenn Sie das Ende der Tabelle erreichen, rufen Sie einfach Ihre an
ObserveSingleEvent
Methode und erhalten Sie mehr Artikel und so weiter.– Lätzchen
29. August 2018 um 18:07 Uhr
Bei der @bibscy-Frage geht es nicht darum, einen Feed vorzubereiten, wenn Sie nur einer Person folgen, sondern wie Sie einen chronologischen Feed wie Twitter erstellen, in dem Sie die Aktivitäten aller Benutzer sehen, denen Sie folgen.
– Zikus
29. August 2018 um 18:20 Uhr