我有“feed”集合,每个feed都有评论。因此,当有人在feed上发表评论时,他会被添加到"subsribers“中,这是Mongo的多键字段。
feeds: {
_id: ...,
text: "Text",
comments: [{by: "A", text: "asd"},{by: "B", text: "sdf"}],
subscribers: ["A","B"]
}然后,当我需要为用户A获取所有带有新评论的提要时,我会请求带有{subscribers:"A"}的提要。
通常有2-5条评论,但有时(在热门feeds上)可能会有>100条评论和>100个订阅者。
我知道不推荐使用带有太多键的多键字段。那么,多少才算太多呢?
我这样问是因为我需要决定-是使用多键还是直接向每个用户发送评论更好。在这种情况下,我必须为每个订阅者复制提要-集合将增长非常快-我认为这也不是很好: 1000个用户,每个用户后面跟着10个用户,每个用户每天进行10次操作=每10天1,000,000条记录!
发布于 2012-07-02 23:32:17
尽管在处理非常大的文档时可能会遇到问题,特别是当MongoDB必须扫描整个文档才能完成查询时,正如您所预期的那样;在MongoDB中,包含大量值的数组本身并不存在问题,即使它们是多键索引。
有一点需要注意:索引不会存储超过1024个字节的键(对于多键文档,这是数组中的项)。只要数组中的项比这个限制短,就应该没问题。
话虽如此,do希望避免数据模型,在这种模型中,数组或文档的其他部分将无限增长并永远存在。虽然MongoDB会为每个文档在磁盘上添加一些填充,但如果文档在创建后大大增加,数据库必须将其移动到磁盘上的另一个位置。无论您决定如何对数据进行建模,都要确保文档在创建后不会增长太多。
参考资料:
https://stackoverflow.com/questions/11290222
复制相似问题