我有“Feed”集合,每个Feed都有评论。因此,当有人对饲料发表评论时,他会被添加到“subribers”中,这是Mongo的多键领域。
feeds: {
_id: ...,
text: "Text",
comments: [{by: "A", text: "asd"},{by: "B", text: "sdf"}],
subscribers: ["A","B"]
}
然后,当我需要为用户A提供包含新评论的所有Feed时,我要求使用{subscriber:“A”}的Feed。
通常会有2-5条评论,但有时(热点播放)可能会有> 100条评论和> 100条订阅者。
我知道不建议使用键太多的多键字段。那多少钱太多了?
我问,因为我需要决定 - 如果我将使用多键,或者更好地直接向每个用户发送评论。在这种情况下,我必须为每个订阅者复制订阅源 - 收集将非常快速地增长 - 我认为也不是很好:1000个用户,每个跟随10个用户,每个每天进行10个操作=每10个记录1 000 000个记录天!
答案 0 :(得分:3)
虽然您可能会遇到真正大型文档的问题,特别是如果MongoDB必须扫描整个文档以完成查询,正如您所期望的那样;具有大量值的数组在MongoDB中本身并不存在问题,即使它们是多键索引。
有一点需要注意:索引不会存储长度超过1024字节的键(在多键文档的情况下,这是数组中的项)。只要数组中的项目短于此限制,您就可以了。
说完这些之后,你做想要避免数据模型,其中数组或文档的其他部分将永远无限制地增长。虽然MongoDB在磁盘上为每个文档添加了一点填充,但如果文档在创建后显着增长,则数据库必须将其移动到磁盘上的另一个位置。但是,您决定对数据建模,确保文档在创建后不会增长很多。
参考: