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:

  1. Den Benutzer (Benutzername, email, Passwort, usw.)
  2. Der Liste der Kontakte (mit unterschiedlichen Kontakte oder Kontakte, Gruppen)
  3. Das Gespräch (ein Gespräch ist eine Sammlung von Nachrichten, die zwischen einigen Personen)
  4. 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

InformationsquelleAutor dev.pus | 2012-06-27

Schreibe einen Kommentar