2017-12-20 4 views
0

Ich würde gerne fragen, ob es eine Best Practice für Firestore gibt, wenn man eine Chat-App entwickelt, und was ist die beste Praxis, um Nachrichten für Chaträume zu speichern.Firestore: Arrays vs Untersammlung von Dokumenten Leistung

Die Annahme hier ist, dass jeder Chatraum sein eigenes Dokument hat.

Ich begann ein Array zu verwenden, um die Nachrichten von den Benutzern zu speichern. Das Problem bei diesem Ansatz besteht darin, dass es keine Möglichkeit gibt, einen neuen Eintrag jedes Mal einzufügen (anzufügen), wenn eine neue Nachricht an den Chat-Raum gesendet wird. Man muss eine neue Kopie des Arrays mit der angehängten neuen Nachricht speichern. Dies scheint etwas zu sein, das wirklich schlecht skalieren würde, es sei denn, der Chat-Verlauf ist in Sub-Arrays usw. aufgeteilt.

In den offiziellen Dokumenten schlagen sie eine Struktur vor, wo man die Nachrichten eines bestimmten Chatrooms als separate Dokumente speichern soll in einer Untersammlung dieses Chatrooms. Ich frage mich, ob dieser Ansatz der beste ist und welche Nachteile es gibt, oder ob es einen anderen bevorzugten Weg gibt, dies zu tun.

+0

Wenn Sie alle Nachrichten für einen Chatroom in einem einzelnen Dokument speichern, werden Sie schnell zu einem Dokument weitergeleitet, das die zulässige Größe von 1 MB überschreitet. Die Verwendung von Arrays ist in einer Umgebung mit mehreren Benutzern, wie in [diesem Blogpost] (https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html) erläutert, eine schlechte Idee. Die Verwendung eines separaten Dokuments für jede Chat-Nachricht scheint am einfachsten zu sein. Angesichts der Tatsache, dass die Dokumentation Sie auch in diese Richtung lenkt, warum denken Sie, dass ein anderer Ansatz besser ist? –

+0

Nein, Sie haben Recht, ich habe nur keine Erfahrung mit Nosql-Datenbanken und ich finde eine Menge Dinge etwas intuitiver von einem mysql-Hintergrund –

Antwort

0

Ich würde im Allgemeinen mit dem Ansatz von "Jeder Chat-Raum hat eine Untersammlung von Nachrichten. Und jede neue Nachricht ist ein separates Dokument in dieser Untersammlung." Dies hat mehrere Vorteile: Es ist einfach, einzelne Nachrichten hinzuzufügen oder zu bearbeiten, und Sie können eine Reihe von verschiedenen Abfragen (wie "Greifen Sie die 20 letzten Nachrichten")

Der größte Nachteil, denke ich, ist, wenn Sie finden dass neue Nutzer häufig in Ihren Chat eintreten und den gesamten Chat-Verlauf des Raums sehen möchten, bis sie sich angemeldet haben, was zu einer großen Anzahl von Datenbank-Lesevorgängen führen würde. Realistischerweise weiß ich jedoch nicht, wie oft das im wirklichen Leben passieren würde. Sie können dies durch Verwendung der Paginierung abschwächen, um Ihren bisherigen Chat stapelweise zu erfassen.

Verwandte Themen