У меня есть сайт с пользователями 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(...) }
Ваши ответы с благодарностью.