2016-08-04 112 views
2

Ich entwickle eine Chat-App mit node.js, redis, socket.io und mongodb. MongoDB kommt zum Schluss und zum Fortbestehen der Nachrichten.Ist es eine gute Idee, Chat-Nachrichten in einer Mongodb-Sammlung zu speichern?

Meine Frage ist, was wäre der beste Ansatz für diesen letzten Schritt?

Ich fürchte, eine Sammlung mit allen Nachrichten wie

{ 
    id, 
    from, 
    to, 
    datetime, 
    message 
} 

kann zu früh zu groß werden, und ist für das Lesen Zwecke sehr langsam in Gang zu bringen, was denken Sie?

Gibt es einen besseren Ansatz, mit dem Sie bereits gearbeitet haben?

+0

Chatten ist nur zwischen zwei Personen oder eine Personengruppe kann auch da sein? – Shrabanee

+0

nur zwei Personen – R01010010

Antwort

1

Ich denke, die db-Struktur ist in Ordnung, wie Sie in Ihrer Frage erwähnt haben.

Sie können einige unique id für den Chat zwischen jedem Paar zuweisen und in jedem Chat-Datensatz behalten. Rufen Sie basierend darauf ab, wenn Sie es anzeigen möchten.

Say 12 ist die eindeutige ID für Chat zwischen A und B, Abruf- sollte auf 12 basieren, wenn Sie Chat für A und B.

So Ihre db Struktur sein kann, zeigen wollen, wie: -

{ 
    id, 
    from, 
    to, 
    datetime, 
    message, 
    uid 
} 

Denken Sie daran, Sie können Ihren Abruf optimieren, wenn Sie einige limit (sagen wir 100) für den Abruf geben. Wenn der Benutzer über 100 hinaus scrollt, werden mehr 100 Chats abgerufen. Welches löst viele abrufen.

Wenn Sie limit verwenden, rufen Sie basierend auf date created ab und verwenden Sie sort mit Abfrage finden auch.

+1

Danke, guter Punkt auf der UID-Index – R01010010

6

In MongoDB speichern Sie Ihre Daten in dem Format, in dem Sie sie später lesen möchten.

Wenn Sie aus der Datenbank eine Liste von Nachrichten lesen, die im Feld 'to' gefiltert wurden und einen dynamischen Datetime-Filter verwenden, ist dieses Schema die perfekte Lösung.

Vergessen Sie nicht, einen Index für die Felder hinzuzufügen, die Sie abfragen werden, dann ist es in der Regel schnell, sie abzufragen, sogar über Millionen von Datensätzen.

Wenn Sie beispielsweise immer den vollen Verlauf eines ganzen Tages anzeigen würden, würden Sie alle Nachrichten für einen einzelnen Tag in einem Dokument speichern. Wenn beide Arten von Abfragen häufig auftreten, speichern Sie Ihre Nachrichten sogar in beiden Formaten.

Wenn die Speicherung ein Problem darstellt, können Sie auch eine Capped-Sammlung verwenden, die automatisch Nachrichten von z. über 1 Jahr alt.

+0

danke, genau die Kappe Sache war etwas, was ich dachte und wusste nicht, wie es geht, danke für die Info – R01010010

0

Nur ein Gedanke hier, sind die Nachrichten Klartext oder dürfen Sie Bilder und Videos auch teilen?

Wenn es Letzteres ist, dann funktioniert das Speichern aller Chats für einen einzelnen Tag in einer Sammlung möglicherweise nicht.

Eigentlich, wenn Sie Bilder und Videos Freigaben erlaubt haben dann müssen Sie berücksichtigen. 16 MB Dokument Einschränkung.

+0

wird es nur Text für jetzt sein, aber das ist ein schöner Punkt für die Zukunft – R01010010