我有一个拥有 50 万用户的网站(在 sql server 2008 上运行)。我现在想包括用户及其朋友的活动流。在 SQL Server 上测试了一些东西之后,很明显 RDMS 不是这种功能的好选择。它很慢(即使我对数据进行了严重的非规范化)。因此,在查看了其他 NoSQL 解决方案之后,我认为我可以使用 MongoDB 来解决这个问题。我将遵循基于activitystrea.ms json 规范的活动流数据结构 所以我的问题是:MongoDB 中活动流的最佳模式设计是什么(有这么多用户,您几乎可以预测它的写入量会很大,因此我选择了 MongoDB——它具有出色的“写入”性能。我考虑了 3 种类型的结构,请告诉我这是否有意义或者我应该使用其他模式模式。
1 - 以这种模式将每个活动与所有朋友/关注者一起存储:
{
_id:'activ123',
演员:{
编号:person1
},
动词:'跟随',
目的:{
对象类型:'人',
id:'person2'
},
更新:日期(),
消费者:[
person3, person4, person5, person6, ... 等等
]
}
2 - 第二个设计:集合名称-activity_stream_fanout
{
_id:'activ_fanout_123',
人名:person3,
活动:[
{
_id:'activ123',
演员:{
编号:person1
},
动词:'跟随',
目的:{
对象类型:'人',
id:'person2'
},
更新:日期(),
}
],[
//活动提要2
]
}
3 - 这种方法是将活动项目存储在一个集合中,将消费者存储在另一个集合中。在活动中,您可能有这样的文档:
{ _id:“123”,
演员:{人:“UserABC”},
动词:“跟随”,
对象:{人:“someone_else”},
更新日期:日期(...)
}
然后,对于追随者,我将拥有以下“通知”文件:
{ activityId:“123”,消费者:“someguy”,updatedOn:日期(...)}
{activityId:“123”,消费者:“otherguy”,updatedOn:日期(...)}
{activityId:“123”,消费者:“thirdguy”,updatedOn:日期(...)}
非常感谢您的回答。