MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erstellen eines personalisierten Facebook-ähnlichen Newsfeeds:SQL, MongoDB?

Ihr Code sagt mir nicht viel; Ich denke, es wäre hilfreich, wenn Sie Ihre Datenstruktur in einfachem JSON / SQL darstellen könnten.

Wie auch immer, ich würde den Stream jedes Benutzers in MongoDB serialisieren. Ich würde das HTML aus verschiedenen Gründen nicht in der Datenbank speichern (zumindest nicht auf dieser Ebene der Software); Stattdessen sollten Sie die relevanten Daten in einer (möglicherweise polymorphen) Sammlung speichern. Das Abrufen des Newsfeeds ist dann sehr einfach, die Indexierung ist unkompliziert usw. Die Ansichtsstruktur würde sich im Wesentlichen nicht ändern. Wenn Sie später den HTML-Code ändern möchten, ist das ebenfalls einfach.

Der Nachteil ist, dass dadurch viele Daten dupliziert werden. Wenn Menschen viele Follower haben können, kann dies zu einem Problem werden. Die Verwendung von Arrays von Benutzer-IDs anstelle einer einzelnen Benutzer-ID könnte hilfreich sein (wenn die Informationen für alle Follower gleich sind), aber es ist auch begrenzt.

Bei sehr großen Assoziationsproblemen gibt es nur Caching. So wie ich es verstehe, besteht die Magie sowohl bei Facebook als auch bei Twitter darin, dass sie die Datenbank nicht sehr oft treffen und viele Daten im RAM speichern. Wenn Sie Milliarden von Elementen verknüpfen, ist dies selbst im Arbeitsspeicher eine Herausforderung.

Die Updates sollten kontinuierlich und nicht stündlich geschrieben werden. Angenommen, Sie haben viel Datenverkehr und die stündliche Aktualisierung dauert 30 Minuten. Nun, der schlimmste Fall ist ein 90 min. Verzögerung. Wenn Sie Änderungen just-in-time verarbeiten, können Sie dies auf wahrscheinlich 5 Minuten verkürzen.

Irgendwann müssen Sie Annahmen einbringen, Caching und einige Heuristiken verwenden. Einige Beispiele:

  • Je aktueller ein Tweet ist, desto mehr Zugriffe wird er sehen. Es hat eine höhere Chance, retweetet zu werden, und es wird viel häufiger gesehen. Behalte es im RAM.
  • Ihre Facebook-Timeline-Übersichtsseite von 1991 wird sich wahrscheinlich nicht täglich ändern, also ist dies ein Kandidat für langfristiges Output-Caching.
  • Die aktuelle Facebook-Aktivität wird wahrscheinlich vielen Schreibvorgängen unterzogen. Output-Caching wird hier nicht viel helfen. Auch hier sollte das Objekt im RAM gehalten werden.