我有一个拥有 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:日期(...)}
非常感谢您的回答。