У меня есть веб-сайт с 500 000 пользователей (работает на сервере sql 2008). Теперь я хочу включить потоки активности пользователей и их друзей. После тестирования нескольких вещей на SQL Server становится очевидным, что RDMS не является хорошим выбором для такого рода функций. это медленно (даже когда я сильно денормализовал свои данные). Поэтому, просмотрев другие решения NoSQL, я решил, что могу использовать для этого MongoDB. Я буду следовать структуре данных, основанной на activitystrea.ms спецификациях json для потока активности Итак, мой вопрос: какой будет наилучший дизайн схемы для потока активности в MongoDB (с таким количеством пользователей вы можете в значительной степени предсказать, что он будет очень тяжелым для записи, поэтому мой выбор MongoDB - у него отличная производительность «записи». Я думал о 3 типах структур, скажите, пожалуйста, имеет ли это смысл, или мне следует использовать другие шаблоны схемы
1 - Хранить каждое действие со всеми друзьями/подписчиками в этом шаблоне:
{ _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), consumers:[ person3, person4, person5, person6, ... so on ] }
2 - Второй дизайн: Имя коллекции — activity_stream_fanout
{ _id:'activ_fanout_123', personId:person3, activities:[ { _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), } ],[ //activity feed 2 ] }
3 — Этот подход будет заключаться в том, чтобы хранить элементы действий в одной коллекции, а потребители — в другой.В действиях у вас может быть такой документ, как:
{ _id: "123", actor: { person: "UserABC" }, verb: "follow", object: { person: "someone_else" }, updatedOn: Date(...) }
следующие «уведомления»:
{ activityId: "123", consumer: "someguy", updatedOn: Date(...) } { activityId: "123", consumer: "otherguy", updatedOn: Date(...) } { activityId: "123", consumer: "thirdguy", updatedOn: Date(...) }
Мы очень ценим ваши ответы.