У меня есть сайт с пользователями 500 тыс. (работает на SQL Server 2008). Теперь я хочу включить потоки активности пользователей и их друзей. После тестирования нескольких вещей на SQL Server становится очевидным, что RDMS не является хорошим выбором для этой функции. он медленный (даже когда я сильно де-нормализовал свои данные). Поэтому, посмотрев на другие решения NoSQL, я понял, что могу использовать MongoDB для этого. Я буду следить за структурой данных на основе activitystrea.ms json спецификации для потока активности Поэтому мой вопрос: какой будет лучший дизайн схемы для потока активности в MongoDB (с этим большим количеством пользователей вы можете в значительной степени предсказать, что он будет очень тяжелым для записи, поэтому мой выбор MongoDB - это отличная производительность записи. Я подумал о трех типах структур, скажите, пожалуйста, если это имеет смысл или я должен использовать другие схемы схемы.
1 - Храните все действия со всеми друзьями/последователями в этом шаблоне:
{ _id:'activ123', actor:{ id:person1 }, verb:'follow', object:{ objecttype:'person', id:'person2' }, updatedon:Date(), consumers:[ person3, person4, person5, person6, ... so on ] }
2 - Второй дизайн: Collection name-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(...) }
Ваши ответы с благодарностью.