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

Изграждане на персонализиран Newsfeed, подобен на Facebook:SQL, MongoDB?

Вашият код не ми казва много; Мисля, че би било полезно, ако можете да изложите структурата на вашите данни в обикновен JSON / SQL.

Както и да е, бих сериализирал потока на всеки потребител в MongoDB. Не бих съхранявал HTML в базата данни по различни причини (поне не на това ниво на софтуера); вместо това трябва да запишете съответните данни в (евентуално полиморфна) колекция. Тогава извличането на новинарския канал е много лесно, индексирането е лесно и т.н. Структурата на изгледа по същество няма да се промени. Ако по-късно искате да промените HTML, това също е лесно.

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

За много големи проблеми с асоциирането има само кеширане. Начинът, по който го разбирам, магията както във facebook, така и в twitter е, че те не удрят db много често и съхраняват много данни в RAM. Ако свързвате милиарди елементи, това е предизвикателство дори в RAM.

Актуализациите трябва да се пишат непрекъснато, а не на всеки час. Да предположим, че имате много трафик и актуализацията на час отнема 30 минути. Най-лошият случай е 90 минути. забавяне. Ако обработвате промените точно навреме, можете да намалите това до вероятно 5 минути.

В даден момент ще трябва да хвърлите предположения, да използвате кеширане и някои евристики. Някои примери:

  • Колкото по-скорошен е един туит, толкова повече трафик ще има. Има по-голям шанс да бъде ретуитнато и се вижда много по-често. Съхранявайте го в RAM.
  • Вашата страница с преглед на хронологията във Facebook от 1991 г. вероятно няма да се променя ежедневно, така че това е кандидат за дългосрочно кеширане на изхода.
  • Текущата активност във Facebook вероятно ще бъде подложена на много писания. Кеширането на изхода няма да помогне много тук. Отново, обектът трябва да се съхранява в RAM.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Зареждане на код за вграждане на JWplayer от колекция от база данни в шаблон на страница в meteor.js

  2. Как да търсите в масив от обекти в mongodb

  3. как да изчислим броя и уникалния брой за две полета във функцията за намаляване на mongo

  4. Най-бързият начин за получаване на хистограма на размерите на масива с помощта на рамката за агрегиране на MongoDB

  5. Как да използвам pymongo за свързване към съществуваща колекция от документи/db?