2016-03-23 8 views
0

Ich verwende Firebase für eine App und die integrierten Echtzeitfunktionen scheinen gut für Instant Messaging geeignet. Es fällt mir nur schwer in den Kopf zu gehen, wie die Datenbank aufgebaut werden soll. Idealerweise ist es so etwas wie diese:Firebase/NoSQL-Schema für ein Instant Messaging-System

messages: { 
    <messageId>: { 
    from: <userId>, 
    to: <userId>, 
    text: <String>, 
    dateSent: <Date> 
    dateRead: <Date> 
    } 
} 

Und das ist alles in Ordnung zum Senden von Nachrichten, aber das Lesen Nachrichten-Threads wird schwierig. Ich muss die (potenziell riesige) Liste von Nachrichten für Nachrichten abfragen, die mit dem Absender und Empfänger des aktuellen Threads übereinstimmen, und diese dann unter dateSent bestellen. Wenn das mit der neuen Abfrage-API von Firebase möglich ist, muss ich noch genau herausfinden, wie es geht.

Antwort

0

Abfrage einer riesigen Liste von Nachrichten ist nie eine gute Idee. Wenn Sie eine schnelle Firebase/NoSQL-Anwendung benötigen, müssen Sie die Daten modellieren, um eine schnelle Suche zu ermöglichen.

In einem Chat-Szenario bedeutet das in der Regel, dass Sie Ihre Chat-Rooms in die Datenstruktur einbetten. Anstatt also eine lange Liste von Nachrichten zu speichern, speichern Sie die Nachrichten für jeden Chat- "Raum" separat.

messages 
    <roomId> 
    <messageId1>: "..." 
    <messageId2>: "..." 
    <messageId3>: "..." 

Jetzt können Sie die Nachrichten für den Chat zugreifen, ohne eine Abfrage, nur ref.child(roomId).on(....

Wenn Sie eine persistente Mapping mögen, dass die gleichen zwei Benutzer im gleichen Raum am Ende gewährleistet, haben einen Blick auf Best way to manage Chat channels in Firebase

+0

Also das bedeutet, dass ich im Grunde die Firebase Chat Beispiel als Basis verwendet werden soll, sondern beschränken Zimmer eine Diskussion zwischen zwei Nutzern? Wie verhindere ich, dass doppelte "Räume" zwischen denselben zwei Benutzern geöffnet werden? – delwin

+0

Siehe http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channel-in-firebase –