MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Каква е добрата структура на документа MongoDB за най-ефективно запитване на последователи/последователи на потребители?

Това е класически проблем за последователи и следващи и няма един отговор за него.. Вижте тази връзка:

mongo db дизайн на следване и емисии, къде трябва да вградя?

Всъщност тази ситуация се поддава много добре на релационна схема, ако MongoDB и SQL сървър бяха единствените възможности за избор, които имате. Но това е специален тип релационен проблем, при който имате двустранна връзка. Това може би може да се обработи по-добре от база данни с графики:

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

Работата е там, че можете да запазите последователи или последователи в потребителски документ, но не и двете, за да избегнете проблеми с двойното изтриване. Така че, ако трябва да се придържате към MongoDB, един изход може да бъде..(ако приемем, че хората не следват/прекратяват следването на никого това често),

Запазете само последователите в документа, защото когато преглеждам профила си, ще се интересувам от хората, които следвам.. (това е причината да ги последвам на първо място, нали?)..И след това направете заявка като:

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

Това ще покаже кои всички ме следват (да кажем, че моят идентификатор е 'user_id').

Друга причина, поради която не предлагам обратното е, че.. човек може да следва най-много 30-40 души, така че потребителски документ, съхраняващ 30-40 последователи, би трябвало да е подходящ за сравнение с потребителски документ, съхраняващ хиляди последователи! С подхода „последовател в документ“ вие получавате грубо еднакви по размер потребителски документи навсякъде. При подхода „последовател в документ“ ще имате и някои много малки, но и много обемисти документи. И в зависимост от количеството данни за последователи, които сте въвели (ако има такива, с изключение на follower_id), вие можете искате да внимавате за ограничението за размер на документа.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb aggregate $lookup срещу намиране и попълване

  2. можем ли да пишем mongodb crud заявки и обобщена заявка заедно?

  3. Страниране с диапазони при заявки и сортиране на динамични, неуникални полета в mongodb

  4. mongoose:връща само ключове от документ

  5. Ръководство за конфигуриране на Load Balancer в MongoDB Sharded Cluster