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

Jaka jest dobra struktura dokumentu MongoDB do najbardziej efektywnego odpytywania obserwujących/obserwujących użytkowników?

To klasyczny problem obserwujących i nie ma na to jednej odpowiedzi. Sprawdź ten link:

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

Właściwie ta sytuacja bardzo dobrze nadaje się do schematu relacyjnego, jeśli MongoDB i serwer SQL byłyby jedynymi opcjami, jakie miałeś. Ale jest to szczególny rodzaj problemu relacyjnego, w którym masz związek dwukierunkowy. Być może lepiej sobie z tym poradzi grafowa baza danych:

http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1

Chodzi o to, że możesz zachować obserwujących lub obserwujących w dokumencie użytkownika, ale nie jedno i drugie, aby uniknąć problemów z podwójnym usuwaniem. Więc jeśli musisz trzymać się MongoDB, jednym wyjściem może być... (zakładając, że ludzie nie śledzą/nie śledzą nikogo tego często),

Trzymaj tylko obserwujących w dokumencie, ponieważ kiedy przeglądam mój profil, byłbym zainteresowany osobami, które obserwuję.. (to jest powód, dla którego je obserwowałem, prawda?)..A następnie wykonaj zapytanie takie jak:

db.Users.find({ user_id : { $in : followees })

To powie, kto wszyscy mnie śledzą (powiedzmy, że mój identyfikator to 'user_id').

Kolejnym powodem, dla którego nie sugeruję odwrotnej sytuacji, jest to, że... można śledzić maksymalnie 30-40 osób, więc dokument użytkownika przechowujący 30-40 obserwujących powinien być w porządku w porównaniu z dokumentem użytkownika przechowującym tysiące obserwujących! Dzięki podejściu „obserwator w dokumencie” otrzymujesz mniej więcej równe dokumenty użytkownika w całym tekście. W zależności od ilości wprowadzonych danych obserwujących (jeśli są, oprócz follower_id), możesz chcesz uważać na limit rozmiaru dokumentu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. wykonać tylko jedno z wielu zduplikowanych zadań za pomocą sidekiq?

  2. Jak uzyskać schemat bazy danych mongoose zdefiniowanej w innym modelu?

  3. Bitwa o bazy danych NoSQL — porównanie MongoDB i Firebase

  4. Sortuj klucze w obiekcie odpowiedzi z Mongoose w ExpressJS i NodeJS

  5. Mongoose async/await znajdź, a następnie edytuj i zapisz?