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

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

По принцип е лоша идея да се вграждат релации „следване/последване“ в потребителски документи поради няколко причини:

(1) има ограничение за максимален размер на документа от 16 MB и е вероятно популярен потребител на добре абониран сайт да получи стотици хиляди последователи, което ще се доближи до максималния размер на документа,

(2) отношенията на последователи се променят често и така случаят, в който потребител придобива много последователи, се превръща в повтарящ се растеж на документа, ако вграждате последователи. Честото нарастване на документи значително ще попречи на производителността на MongoDB и затова трябва да се избягва (случайното нарастване на документи, особено когато документите са склонни да достигнат стабилен краен размер, е по-малко наказание за производителността).

Така че, да, най-добре е да разделите връзката следване/последване в отделна колекция от записи, всеки от които има две полета, напр. { _id :, oid :}, с индекси на _id (за „кой следвам? " заявка) и oid (за заявката "кой ме следва?"). Всяка индивидуална промяна на състоянието се моделира чрез добавяне или премахване на един документ, но ако показвате и неща като брой последователи, вероятно трябва да поддържате отделни броячи, които актуализирате след всяко вмъкване/изтриване на ръбове.

(Разбира се, това предполага, че вашите бизнес изисквания ви позволяват известна гъвкавост по отношение на подробностите за последователност:като цяло, ако вашият код за показване каже на потребител, че има 304 последователи и след това продължи да ги изброява, само най-неприятният потребител ще провери дали изброените последователи преброяване до 304. Ако бизнес изискванията налагат абсолютна последователност, или ще ви е необходима база данни, която изолира транзакциите вместо вас, или в противен случай ще трябва сами да направите преброяването като част от показването на всички потребителски самоличности.)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Уникалните индекси на MongoDB не позволяват презаписване

  2. В mongodb знаете индекса на елемент от масив, съвпадащ с $in оператор?

  3. Как да актуализирате поле, като използвате предишната му стойност в MongoDB/Mongoose

  4. грешка в monogdb errmsg:WiredTigerIndex::insert:ключът е твърде голям за индексиране, неуспешно

  5. MongoDB $group (монго игрище)