2016-11-23 3 views
1

Ich versuche herauszufinden, welche die beste Option zum Speichern von individuellen Benutzerprotokollinformationen und allgemeinen Meta-Profiling-Daten für jeden Benutzer auf unserem System ist.Eine Sammlung pro Benutzer oder eine Sammlung von Benutzern

Die ursprüngliche Idee war, eine "Profiler" Sammlung zu haben und jedes Dokument würde einen Benutzer darstellen. Das Problem bei diesem Design ist, dass ein Power-User so viele Metadaten und Historien im Laufe eines Jahres oder weniger sammeln kann, dass er das Limit der Dokumentengröße überschreitet. Es würde auch dazu führen, dass die Dokumente tiefere und komplexere Strukturen aufweisen, was zu langsameren Abfragen führen könnte.

Die alternative Entwurfsidee besteht darin, für jeden Benutzer eine Sammlung zu erstellen, und jedes Dokument enthält bestimmte Arten von Profiling- und Verlaufsdaten. Dies hat mehrere Vorteile, nämlich die Geschwindigkeit. Stellt aber auch Herausforderungen dar, wenn Vergleiche mit anderen Benutzern durchgeführt werden müssen (lösbar über andere Tracking-DBs). Ich kann keine definitive Antwort auf die Frage finden, wie viele Sammlungen eine einzelne Mongo-Datenbank enthält.

Wenn es Millionen von Millionen von Sammlung pro Datenbank kann dann fantastisch, sonst muss ich bessere Möglichkeiten für die Modellierung dieser Daten zu finden. Gehe ich das richtig?

Das Ziel ist es, eine Geschichte der Interaktionen eines Benutzers, Reputationsverfolgung, ihre Interessen im Laufe der Zeit, Funktionen, die sie regelmäßig verwenden, etc., die eine reichere Erfahrung ermöglichen können.

+1

Sammlung von Benutzern + Indizierung ist wahrscheinlich der beste Ansatz. – NPSF3000

Antwort

0

Erstellen Sie 2 Sammlungen: Benutzer & Benutzerinteraktionen.

Es gibt bestimmte Dinge, die durchaus Sinn machen innerhalb eines Benutzer Dokument zu speichern:

  • Reputation Tracking
  • Interessen - gemeinsame Tags (ähnlich Überlauf stapeln), dass ein Benutzer
  • Eigenschaften frequentiert - - Dies sollte eine endliche Liste sein. Sie könnten Schlüssel und sie $ erhöhen, da sie

Benutzer-Interaktionen auf der anderen Seite verwendet werden, ist eher ein Protokolltyp-Struktur, die Sie später mit einem Rückverweis und Prozess speichern möchten.

Überprüfen Sie auch Apache Kafka - Es ist eine verteilte Warteschlangentechnologie, die LinkedIn verwendet, um etwas zu tun, was dem ähnlich ist, was Sie beschreiben.

Verwandte Themen