我有一个拥有500万用户的网站(在sql server 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" }, …