Załóżmy, że masz dużą liczbę użytkowników (M) i dużą liczbę dokumentów (N) i chcesz, aby każdy użytkownik mógł oznaczyć każdy dokument jako przeczytane lub nieprzeczytane (tak jak każdy system poczty e-mail). Jaki jest najlepszy sposób reprezentowania tego w MongoDB? Lub jakiejkolwiek innej bazy danych dokumentów?MongoDB/NOSQL: Najlepsze podejście do obsługi statusu odczytu/nieprzeczytania wiadomości
Istnieje kilka pytań na StackOverflow tym pytaniem do relacyjnych baz danych, ale nie widać żadnych zaleceń dla baz danych z dokumentu:
What's the most efficient way to remember read/unread status across multiple items?
Implementing an efficient system of "unread comments" counters
Zazwyczaj odpowiedzi obejmować listę stołowego wszystko, co użytkownik przeczytał: (tj. krotki identyfikatora użytkownika, identyfikator dokumentu) z pewnymi możliwymi optymalizacjami dla daty odcięcia pozwalającej na odczytanie całej bazy danych i ponowne uruchomienie, wiedząc, że wszystko przed tą datą jest "czytane" ".
Eksperci MongoDB/NOSQL, jakie podejścia zauważyliście w praktyce tego problemu i jak się spisali?
Dziękuję, więc twoja rekomendacja jest zasadniczo tym samym rodzajem tabeli "krotki/dołącz", jak w przypadku relacji, prawda? Jakiś szczególny powód, dla którego przechowujesz zarówno wiadomości, jak i prefiksy w tej samej kolekcji? –
Rzeczą w MongoDB jest to, że zazwyczaj bardziej płaski obiekt można uczynić lepszym. Chociaż może przechowywać struktury zagnieżdżone, nie jest najlepszym rozwiązaniem w przypadku zapytań lub dostania się do nich później, aby je zmienić. Tak więc wiele rzeczy może wyglądać podobnie do relacji, ale z mniejszą ilością abstrakcji z powodu nie używania tabel. Tak naprawdę nie ma powodu, dla którego przechowywałbym je w tej samej kolekcji, poza tym, że nie lubię mieć bazillionowych kolekcji. Jeśli planujesz posiadanie milionów wiadomości, rozsądne może być korzystanie z różnych kolekcji, dzięki czemu możesz skonfigurować indeksy, aby lepiej pasowały do każdego obiektu. – Klinky