MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongo db projekt obserwowania i kanałów, gdzie powinienem osadzić?

Ogólnie rzecz biorąc, osadzanie relacji obserwowanych/następnych w dokumentach użytkownika jest złym pomysłem z kilku powodów:

(1) istnieje maksymalny limit rozmiaru dokumentu wynoszący 16 MB i jest prawdopodobne, że popularny użytkownik dobrze subskrybowanej witryny może mieć setki tysięcy obserwujących, które zbliżą się do maksymalnego rozmiaru dokumentu,

(2) relacje obserwujących zmieniają się często, a więc przypadek, w którym użytkownik zyskuje wielu obserwujących, przekłada się na powtarzający się wzrost dokumentu, jeśli osadzasz obserwujących. Częsty wzrost dokumentów znacznie zmniejszy wydajność MongoDB, dlatego należy tego unikać (sporadyczny wzrost dokumentów, zwłaszcza gdy dokumenty mają tendencję do osiągania stabilnego rozmiaru końcowego, jest mniejszym spadkiem wydajności).

Tak więc, najlepiej jest podzielić następującą/następną relację na osobną kolekcję rekordów, z których każdy ma dwa pola, np. { _id :, oid :}, z indeksami na _id (dla "kogo śledzę? „zapytanie) i oid (dla zapytania „kto mnie obserwuje?”). Każda indywidualna zmiana stanu jest modelowana przez dodanie lub usunięcie pojedynczego dokumentu, ale jeśli wyświetlasz również takie rzeczy, jak liczba obserwujących, prawdopodobnie powinieneś zachować oddzielne liczniki, które aktualizujesz po każdym wstawieniu/usunięciu krawędzi.

(Oczywiście zakłada to, że wymagania biznesowe pozwalają na pewną elastyczność w szczegółach spójności:ogólnie, jeśli kod wyświetlania mówi użytkownikowi, że ma 304 obserwujących, a następnie przystępuje do ich wyliczenia, tylko najbardziej wybredny użytkownik sprawdzi, czy wyliczeni obserwujący sumuje się do 304. Jeśli wymagania biznesowe wymagają absolutnej spójności, będziesz potrzebować bazy danych, która izoluje transakcje za Ciebie, albo będziesz musiał wykonać liczenie samodzielnie w ramach wyświetlania wszystkich tożsamości użytkowników).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. zmiana nazwy kolekcji za pomocą mongoDB

  2. Czy klauzula $in MongoDB ma maksymalny limit liczby argumentów?

  3. Żaden serwer nie został wybrany przez WritableServerSelector z klastra

  4. Sprawdzanie wyjątkowości osadzonego dokumentu w zakresie jego rodzica w manguście

  5. Zainstaluj MongoDB na komputerze Mac