2016-03-13 8 views
5

von Jahren kommen von relationalen Datenbanken, ich versuche, eine ziemlich grundlegende Chat/Messaging-App Firebase mitStruktur eine NoSQL-Datenbank für eine Chat-Anwendung (mit Firebase)

zu entwickeln

Feuerbasis verwendet einen NoSQL-Datenstruktur Ansatz JSON mit formatierte Zeichenfolgen

Ich habe viel geforscht, um zu verstehen, wie man die Datenbank im Hinblick auf Leistung strukturiert. Ich habe versucht, die Struktur zu „denormalize“ und endete mit dem folgenden:

{ 

"chats" : { 

    "1" : { 
     "10" : { 
      "conversationId" : "x123332" 
     }, 
     "17": { 
      "conversationId" : "x124442" 
     } 
    } 
}, 

"conversations" : { 

    "x123332" : { 

     "message1" : { 

     "time" : 12344556, 
     "text" : "hello, how are you?", 
     "userId" : 10 
     }, 
     "message2" : { 

     "time" : 12344560, 
     "text" : "Good", 
     "userId" : 1 
     } 
    } 
    } 
} 

die Zahlen 1, 10, 17 sind Beispiel Benutzer-IDs.

Meine Frage ist, kann dies besser strukturiert werden? Ziel ist es, die App-Nutzer zu vergrößern und trotzdem die bestmögliche Leistung zu erzielen.

+1

Firebase-Datenstrukturen hängen davon ab, was Sie mit den Daten tun möchten. Was präsentiert wird, ist sehr erweiterbar, abfragbar und die Knoten sind für Änderungen beobachtbar. Außerdem ist Firebase unglaublich schnell und kann tausende Anfragen problemlos bearbeiten. Ohne jedoch den vollen Umfang oder eine bestimmte Frage zu den Daten zu verstehen, ist es eine offene Frage. Beispielsweise; Welche Funktion hat der Knoten des Chats? Der Konversationsknoten enthält alles, was zum Verfolgen einer Konversation mit einem anderen Benutzer benötigt wird. z.B. Der Benutzer meldet sich an, fragt alle Konversationen ab, die seine Benutzer-ID enthalten, und beobachtet sie dann. – Jay

+0

Betrachten Sie es als eine grundlegende WhatsApp App, wo Sie eine Aktivität haben, die alle meine Chats anzeigen. Wenn ich auf einen Chat klicke, erhalte ich die "Detailansicht", also die Konversationsnachrichten zwischen den beiden Benutzern. –

+0

Die Frage selbst erklärt, was die App tut, aber die Verwendung der Struktur ist zu vage; Die beschriebene Funktionalität könnte einfach mit dem Konversationsknoten durchgeführt werden. Denormalisierung von Daten ist sehr wichtig, aber tun Sie es nicht nur für die Erstellung eines anderen Knotens, wenn es nicht notwendig ist. In diesem Fall kann es notwendig sein oder auch nicht. Die Frage muss sehr viel spezifischer sein, also würde ich vorschlagen, etwas Code zum Testen zu erstellen und wenn Sie auf ein Problem stoßen, * dann * posten Sie Ihre spezifische Frage. – Jay

Antwort

2

Ein Fall zum Speichern von Nachrichten wie folgt aussehen könnte:

"userMessages": 
    { "simplelogin:1": 
     { "simplelogin:2": 
      { "messageId1": 
       { "uid": "simplelogin:1", 
        "body": "Hello!", 
        "timestamp": Firebase.ServerValue.TIMESTAMP }, 
       "messageId2": { 
        "uid": "simplelogin:2", 
        "body": "Hey!", 
        "timestamp": Firebase.ServerValue.TIMESTAMP } 
       } 
      } 
     } 

Hier ist ein fireslack Beispiel dieser Struktur kam. Dieses Tutorial baut eine App wie slack mit Firebase:

Wenn Sie etwas spezifischer möchten, wäre mehr Informationen hilfreich.

+0

aber was ist simplelogin2 meldet an, wie finden Sie die Chat-Nachrichten für diesen Benutzer? – Ruben

+1

Sie würden wahrscheinlich die gleichen Informationen unter 'simplelogin2' speichern. Ja, es dupliziert Informationen in der Datenbank, aber das ist oft der Preis, den Sie für schnelle Abfragezeiten in NoSQL bezahlen. –

+0

hast du vielleicht mehr beispiele? Es ist so komisch und intuitiv, alles doppelt oder mehr in der Datenbank zu haben. Auf der Firebase-Website (https://firebase.google.com/docs/database/web/structure-data) gibt es eine andere Struktur für eine Chat-App, aber ich verstehe nicht, wie man diese Daten lesen kann, es gibt Schlüssel eins, zwei, drei ... aber wenn ich als 'ghopper' eingeloggt bin, wie kann ich den richtigen Schlüssel für den aktuellen Chat finden? – Ruben