MongoDB-Struktur für Nachrichten-app
Ich bin zu brechen meine Meinung, denken über eine gute Dokumenten-Struktur für den Umgang mit einem message-app.
Ich im Grunde benötigen Sie drei (oder vier) Typen von Objekten:
- Den Benutzer (Benutzername, email, Passwort, usw.)
- Der Liste der Kontakte (mit unterschiedlichen Kontakte oder Kontakte, Gruppen)
- Das Gespräch (ein Gespräch ist eine Sammlung von Nachrichten, die zwischen einigen Personen)
- Die Nachricht (die Nachricht enthält, Körper, einige timestamp und dem Schöpfer.)
Meine Idee war die Einbettung der Kontakte in das Benutzer-Dokument und Einbettung der Nachrichten in einer Konversation Dokument:
1. Benutzer
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', //used for unique constraints
email: 'developement.pus@gmail.com,
emailCanonical: 'developement.pus@gmail.com,
salt: 'some hash',
password: 'hash with salt',
logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
state: { online: true, available: false },
contacts: [ user_id1, user_id2, user_id3 ]
}
2. Gespräch
{
members: [ user_id1, user_id2 ],
messages: [
{ author: user_2, body: 'Hi what's up' },
{ author: user_1, body: 'Nothing out here :(' },
{ author: user_2, body: 'Whanna ask some question on stackoverflow' },
{ author: user_1, body: 'Okay, lets go' }
]
}
Was haltet Ihr von diesem schema?
Ich denke, es wäre besser, Sie zu halten getrennt (also jedes Dokument für sich ist), da jedes Dokument hat verschiedene update-Frequenz. Aber ich wirklich don ' T haben keine Erfahrung davon, so wäre es gut, zu hören, einige Ratschläge 🙂
Hinsichtlich
Ein MongoDB-schema ist nie "gut" oder "schlecht" von sich. Sie benötigen zum detail, die queries und updates, die Sie gehen zu machen. Nur dann können Sie beurteilen, ob ein vorgegebenes schema passt diese operation-Pattern.
Sie müssen auch eine Schätzung der Verteilung der Daten, Größen, z.B.: wie vielen Nachrichten wird ein Gespräch enthalten, im Durchschnitt, bei einer maximalen? Dies kann wichtig sein, wenn Sie einbetten möchten.
Okay, ich werde dies im Auge behalten. Ist es ein gemeinsames Konzept der cache zum Beispiel die Nachrichten mit redis und als Sie alle speichern, mongo, wenn die Sitzung beendet? Ich bin ein bisschen unsicher über die Durchführung einer Menge von Aktionen schreiben, um eine "unstrukturierte" Objekt
Sie müssen auch eine Schätzung der Verteilung der Daten, Größen, z.B.: wie vielen Nachrichten wird ein Gespräch enthalten, im Durchschnitt, bei einer maximalen? Dies kann wichtig sein, wenn Sie einbetten möchten.
Okay, ich werde dies im Auge behalten. Ist es ein gemeinsames Konzept der cache zum Beispiel die Nachrichten mit redis und als Sie alle speichern, mongo, wenn die Sitzung beendet? Ich bin ein bisschen unsicher über die Durchführung einer Menge von Aktionen schreiben, um eine "unstrukturierte" Objekt
InformationsquelleAutor dev.pus | 2012-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich, dass diese Frage ist alt, aber für alle interessierten, eine ähnliche Frage wurde gestellt und eine Antwort sieht lebensfähig https://stackoverflow.com/a/30830429/132610
Update #1
1) Skalierbarkeit: MongoDB skaliert gut mit sehr großen Sammlung. Milliarden von Nachrichten pro Sammlung. Es gibt eine Technik, genannt Splitter, mit denen Sie geteilt größeren Sammlung auf mehrere Knoten.
2) Lesen. Da MongoDB hat, Indizierung, Mechanismen, liest sind vergleichbar mit einem fein abgestimmten Datenbank-engine. So wird das Lesen kein Problem sein. Vor allem, wenn eine Konversation(Gruppe|Zimmer) hat weniger Teilnehmer, zum Beispiel zwei-Personen-messaging-einander.
Conversations
und eine weitere Kollektion fürMessages
. lassen Sie uns sagen, wir haben 1 million Nutzer in der messaging-und Sie sprechen miteinander,Messages
Tabelle kann bis zu Milliarden von Milliarden Dokumenten, tut mongodb haben Fähigkeit, den Umgang mit solchen großen Sammlung von Dokumenten, und was ist Suche nach der Antwort Zeit? lassen Sie uns sagen, wir Suche für die letzten 100 Nachrichten, die ein einzelner Benutzer in Milliarden von Milliarden von Nachrichten, wie viel Zeit es nehmen, um zurück zu kommen?Ich habe exakt das gleiche Frage!!! Sie waren in der Lage zu finden, die "best practice" - Antwort?
InformationsquelleAutor P.M
Deine Frage ist wirklich eine schema-design. Ich schlage vor, einen Blick auf diese Seite auf MongoDB-schema-design erhalten Sie einen Einblick in die Entscheidungen und trade-offs: http://www.mongodb.org/display/DOCS/Schema+Design
Zusätzlich, sollten Sie vielleicht überprüfen Sie die links in der "Siehe Auch" - Abschnitt dieses Dokuments. Besonders empfehle ich die video-Präsentationen.
Schließlich, Sie sollten wahrscheinlich betrachten Sie dieses Dokument für eine Diskussion der drei möglichen schemas für ein messaging - /kommentierte Datenbank, einschließlich der trade-offs für jedes design: http://docs.mongodb.org/manual/use-cases/storing-comments/
InformationsquelleAutor William Z
dies ist mein Vorschlag,
}
InformationsquelleAutor Amirouche Zeggagh