Angenommen, Sie haben eine große Anzahl von Benutzern (M) und eine große Anzahl von Dokumenten (N) und möchten, dass jeder Benutzer jedes Dokument als markieren kann gelesen oder ungelesen (wie jedes E-Mail-System). Was ist der beste Weg, dies in MongoDB darzustellen? Oder irgendeine andere Dokumentendatenbank?MongoDB/NOSQL: Beste Lösung für den Umgang mit Lese-/Lesestatus von Nachrichten
Es gibt mehrere Fragen auf Stackoverflow diese Frage für relationale Datenbanken zu fragen, aber ich habe nicht mit Empfehlungen für Dokument-Datenbanken finden Sie unter:
What's the most efficient way to remember read/unread status across multiple items?
Implementing an efficient system of "unread comments" counters
Typischerweise sind die Antworten beinhalten eine tabellarische Auflistung alles, was ein Benutzer gelesen hat: (dh Tupel von Benutzer-ID, Dokument-ID) mit einigen möglichen Optimierungen für ein Cut-Off-Datum, das es ermöglicht, die Datenbank zu löschen und erneut zu wissen, dass alles vor diesem Datum gelesen wird ".
Also, MongoDB/NOSQL Experten, welche Ansätze haben Sie in der Praxis für dieses Problem gesehen und wie haben sie funktioniert?
Danke, also ist Ihre Empfehlung im Wesentlichen die gleiche Art von "Tuple/Join" -Tabelle wie der relationale Fall, oder? Warum speichern Sie sowohl die Nachrichten als auch die Einstellungen in derselben Sammlung? –
Die Sache mit MongoDB ist, dass in der Regel desto flacher Sie Ihr Objekt zum Besseren machen können. Während es geschachtelte Strukturen speichern kann, ist es nicht das Beste, diese Strukturen später zu fragen oder in diese Strukturen zu gelangen, um sie zu ändern. Viele Dinge können also ähnlich aussehen wie relationale, aber mit weniger Abstraktion, da keine Tabellen verwendet werden. Es gibt auch keinen Grund, warum ich sie in der gleichen Kollektion aufbewahre, außer dass ich keine bazillion Sammlungen habe. Wenn Sie planen, Millionen von Nachrichten zu haben, ist es ratsam, verschiedene Sammlungen zu verwenden, damit Sie die Indizes für jedes Objekt besser anpassen können. – Klinky