split.s: Facebook Nachrichten-System

Hi Forum!

Was meint ihr, wie macht Facebook die Datenbank für das Nachrichten-System?
Handelt es sich um mehrere Tabellen? Gibts so eine Art "Kopf-Tabelle" und was meint ihr, wie sieht so ein "Web2.0 Nachrichten-System" wohl aus?

Zerbreche mir hier schon seit Stunden den Kopf und habe das Gefühl vor einer Mauer zu stehen.

LG

  1. Hi,

    Was meint ihr, wie macht Facebook die Datenbank für das Nachrichten-System?

    Warum ist Facebook deine „Referenz“ für so eine Frage?

    Zerbreche mir hier schon seit Stunden den Kopf und habe das Gefühl vor einer Mauer zu stehen.

    Klingt eher nach davor gelaufen ...

    Handelt es sich um mehrere Tabellen? Gibts so eine Art "Kopf-Tabelle" und was meint ihr, wie sieht so ein "Web2.0 Nachrichten-System" wohl aus?

    Beschäftige dich zunächst mit den Grundlagen der Datenmodellierung und dem Stichwort Normalisierung.

    Wenn du dann einen Ansatz hast, können wir dessen Sinn diskutieren.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hi Forum!

    Was meint ihr, wie macht Facebook die Datenbank für das Nachrichten-System?
    Handelt es sich um mehrere Tabellen? Gibts so eine Art "Kopf-Tabelle"

    Das wird hier keiner sicher sagen können. Facebook denkt logischerweise sehr viel über seine Datenstruktur/Performance etc. nach. Das kann man sicherlich nicht in einem Forenbeitrag abarbeiten.

    Es gibt aber von den Facebook-Technikern ein Blog oder eine Infoseite oder sowas wo sie über die Technik bisssl was erzählen. Habe denk Link leider nicht mehr, aber das lässt sich sicher finden...

    und was meint ihr, wie sieht so ein "Web2.0 Nachrichten-System" wohl aus?

    Was meinst du genau? Was ist deine Aufgabe?

    Gruß
    Alex

    1. Ich will ja nicht Facebook abbilden. Ich suche lediglich eine Inspiration hinsichtlich der Datenbank.
      Ich habe bisher immer nur die alten "Private Message"-Systeme die ja auch in Foren angewandt werden. Da gibts nur eine Tabelle:

      Sender | Empfänger | Betreff | Text | Geloescht_von_Sender | Geloescht_von_Empfänger | Datum

      Der Nachteil dabei ist, dass man jede Nachricht einzeln öffnen muss und man nicht wie bei Facebook und anderen Netzwerken, den ganzen Nachrichtenverlauf vor sicht hat. Das was Facebook da macht ist ja wohl eher sone Art Chat.
      Aber ich frage mich, wie das Datenbanktechnisch organisiert wird.

      Auf der Messenger-Startseite gibts dann immer so eine Art Übersicht aller Gespräche. Dort zu sehen ist dann oft nur der letzte Beitrag, egal ob von mir oder dem Empfänger.
      Wenn ihr mal darüber nachdenkt, merkt man schnell, dass es schon ziemlich speziell ist.

      Leider finde ich bei Google sogut wie keine Beiträge zu solchen Themen.

      1. Hi,

        Wenn ihr mal darüber nachdenkt, merkt man schnell, dass es schon ziemlich speziell ist.

        Leider finde ich bei Google sogut wie keine Beiträge zu solchen Themen.

        Ich versteh immer noch nicht dein Problem. Worum geht es dir?

        Geht es dir um den Programmablauf/die Nachrichtendarstellung als solche? (Das wäre eher ein PHP/.../...-Problem)
        Geht es dir wirklich nur um eine Datenbankstruktur, die funktioniert? (Das ist das kleinste Kunststück und funktioniert sicher problemlos mit dem was du angesprochen hast - nur die Darstellung muss man halt abwandeln, aber das hat mit der DB nichts zu tun.)
        Oder geht es dir um die Performance? Dazu muss man sich Gedanken machen, was wann wie abgerufen/durchsucht werden soll - und messen muss man.

        Gruß
        Alex

        1. Hi,

          es geht nur um die Tabellen! Ich bin mir fast sicher, dass das ganze aus min zwei Tabellen besteht. Schaut euch das Teil doch mal an. Mich interessiert nur die Tabellen-Verteilung.
          Wie würdet ihr sowas machen?

      2. Hallo,

        Facebook arbeitet meines Wissens auch stark mit MySQL. Du sprichst jedoch anscheinend vom »News Feed«, in dem alle Statusmeldungen von Profilen vorkommen, die man abonniert hat. Der arbeitet grundsätzlich anders als ein einfaches Nachrichtensystem. Den Zusammenzustellen bedeutet, verschiedene Daten zu aggregieren. Bei Facebook erzeugt eine Statusmeldung keine Nachrichten an alle potenziellen Empfänger, das würde nicht skalieren. Wenn ein Profil mit 31,5 Millionen Followern eine Statusmeldung absetzt, werden nicht 31,5 Millionen Nachrichten erzeugt.

        Zunächst einmal gibt es Statusmeldungen. Die können von verschiedenen Typen sein und an denen können verschiedene weitere Daten hängen, z.B. Bilder. Beim Anlegen dieser passiert natürlich schon viel und dabei fallen viele Sonderdaten an (z.B. Metadaten über eine URL). Statusmeldungen können auch Kommentare haben. Diese Statusmeldungen und Kommentare samt anhängender Daten können meiner Vermutung nach recht klassisch in SQL-Datenbanken gespeichert werden bzw. verteilten Datenbanken wie Cassandra. Hinzu kommen verteilte Dateisysteme, um Bilder, Videos usw. in der Cloud zu speichern und weltweit schnell verfügbar zu machen.

        Interessant wird es, wenn die relevanten Nachrichten zusammengesucht werden. Dazu bedarf es einer Graph-Datenbank, die die Beziehungen zwischen Profilen speichert und sehr schnell ausgeben kann, welche Quellen für Statusmeldungen überhaupt infrage kommen. Jeder »Like« und jede »Freundschaft« ist dort vermerkt. Auch dafür gibt es extra Datenbanken wie FlockDB. Man kann so etwas natürlich auch mit – nicht dafür spezialisierten – SQL-Datenbanken lösen.

        Hat man alle relevanten Quellen, kann man deren Nachrichten aggregieren, filtern, zusammensetzen und sortieren. Dabei passiert natürlich auch viel Magie, es gibt sicher noch weitere spezialisierte Datenbanken und massig Caches, die hierbei ins Spiel kommen.

        Ein kleineres Social Network (> 100000 Nutzer), das wir mitentwickelt haben, arbeitet weitesgehend mit SQL bei der Zusammenstellung der Newsfeeds. Statusmeldungen und sonstige Aktionen sind, wenn ich mich richtig erinnere, in klassischen Tabellen abgespeichert. Bei der Zusammenstellung wird von der Freundesliste ausgegangen. Das ganze wird schnell durch massive SQL-Optimierung und Caches. Es existiert daneben auch ein klassisches Messaging-System, das definierte Absender und Empfänger hat.

        Mathias

        1. Hi,

          Facebook arbeitet meines Wissens auch stark mit MySQL. Du sprichst jedoch anscheinend vom »News Feed«

          Ich glaube, dass er schon das Nachrichtensystem meint. Das ist neuerdings (wie er sagt) wie ein Chat aufgebaut.

          Für den NewsFeed kann man auch warten, bis das Patent öffentlich wird und man kann es da nachlesen ;) ...oder vielleicht gibts das schon irgendwo zum einsehen, weiß ich aber nicht...

          Gruß
          Alex

          1. Hallo,

            Für den Chat verwendet Facebook meines Wissens XMPP, ein Standardprotokoll für solche Anwendungen:
            https://www.facebook.com/blog.php?post=297991732130

            Mathias