我们的应用程序允许用户创建帖子和评论。数据正在快速增长,我们已经回顾了 Mongodb 扩展策略。我们喜欢http://www.10gen.com/presentations/mongosf2011/schemascale中介绍的方法,它使用嵌入式和非嵌入式文档之间的混合模式,对评论进行分组,以便将它们保存在每组 100 或 200 条评论中文档。
{
"_id" : '/post/2323423/1--1',
"comments" : [{
"author" : "peter",
"text" : "comment!",
"when" : "June 24 2012,
"votes": 43
},
{
"author" : "joe",
"text" : "hi!",
"when" : "June 25 2012,
"votes": 102
},
...
],
}
通过对评论进行分桶,显示数千条评论所需的磁盘读取次数更少,同时文档保持较小,因此写入速度很快。对按日期排序的评论进行分页是完美的。
我们对这种方法非常感兴趣,但我们的应用程序要求评论按投票和子评论排序。
目前我们使用非嵌入式方法,它使用单独的评论集合。允许我们检索按任何字段排序的数据并且子注释很容易(通过引用),但性能正在成为一个问题。我们想使用分桶,但按投票排序的东西似乎不适合桶。
按日期排序是微不足道的,只需在用户单击“下一页”时转到下一个存储桶,查询一个文档。但是,如果我们想按选票排序,我们如何做到这一点?我们必须检索所有存储桶,然后对评论进行排序,这显然是无效的......
关于适当的模式设计来实现这一点的任何想法?