大型数据集上的 MongoDB 子文档查询性能
Posted
技术标签:
【中文标题】大型数据集上的 MongoDB 子文档查询性能【英文标题】:MongoDB Subdocument Query Performance on Large Dataset 【发布时间】:2017-07-16 00:37:26 【问题描述】:我在 MongoDB 中为对话创建了一个模式,其中消息存储为对话对象中的对象数组。
Conversation
company_id: type:ObjectId, index: true ,
messages: [
_id: type: ObjectId, index: true
]
我有一个查询,它根据数组中发送的第一条消息(从应用程序的另一部分发送)的 company_id 和 _id 查找对话。
Conversation.findOne( company_id: c_id, messages._id: firstMessage )
理论上,如果一家公司有 1 亿个对话,并且每个对话有 100 万条消息,那么查询子文档会有多少性能问题,而不是我将第一个消息 id 存储在主文档中仅记录和查询基础对象?
Conversation
company_id: type:ObjectId, index: true ,
firstMessage_id: type:ObjectId, index: true ,
messages: [
_id: type: ObjectId, index: true
]
Conversation.findOne( company_id: c_id, firstMessage_id: firstMessage )
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:如果您的个人消息为 100 万条,我会将它们完全保存在一个单独的集合中,并使用 3.4 版中聚合框架的 $lookup 来为您提供结果。当然,我会假设两个集合中都有适当的索引,并且使用适当的过滤器来匹配公司。
【讨论】:
马里奥,谢谢你的回答。实际上,我将消息作为一个单独的集合,其中 id 存储在对话中,但是我更想知道对象查找与子对象查找的查询计算。以上是关于大型数据集上的 MongoDB 子文档查询性能的主要内容,如果未能解决你的问题,请参考以下文章