1

我有“提要”集合,每个提要都有评论。因此,当有人对提要发表评论时,他会被添加到 Mongo 的多键字段“订阅者”中。

feeds: {
 _id: ...,
 text: "Text",
 comments: [{by: "A", text: "asd"},{by: "B", text: "sdf"}],
 subscribers: ["A","B"]

}

然后,当我需要获取用户 A 的所有带有新评论的提要时,我会请求带有 {subscribers:"A"} 的提要。

通常有 2-5 条评论,但有时(在热门提要上)可能有超过 100 条评论和超过 100 条订阅者。

我知道不建议使用包含太多键的多键字段。那么多少算太多?

我问是因为我需要决定 - 我是使用多键还是直接向每个用户发送评论更好。在这种情况下,我必须为每个订阅者复制提要 - 并且集合会增长得非常快 - 我认为这也不好:1000 个用户,每个用户后面跟着 10 个用户,每个用户每天执行 10 个操作 = 每 10 个记录 1 000 000天!

4

1 回答 1

3

尽管您可能会在处理非常大的文档时遇到问题,尤其是当 MongoDB 必须扫描整个文档以完成查询时,如您所料;具有大量值的数组在 MongoDB 中并没有问题,即使它们是多键索引。

有一个警告:索引不会存储超过 1024 字节的键(在多键文档的情况下,这是数组中的项目)。只要数组中的项目比这个限制短,你应该没问题。

话虽如此,您确实希望避免使用数组或文档的其他部分将无限且永远增长的数据模型。虽然 MongoDB 为每个文档在磁盘上添加了一点填充,但如果文档在创建后大幅增长,数据库必须将其移动到磁盘上的另一个位置。无论您决定对数据进行建模,请确保您的文档在创建后不会增长太多。

参考:

于 2012-07-02T15:32:17.243 回答