MongoDB。为什么索引请求执行如此缓慢?

标签 mongodb

在以下方面需要您的帮助:

我有一个 MongoDB 集合,其中包含超过 2600 万个文档。 文档的结构是不变的(pastebin.com/iBzW0Fkz)

该集合包括“用户”字段的索引

db.conversations.getIndexes();

结果 - pastebin.com/xHecpw00

对字段“用户”的所有请求都执行得很慢(超过 100 毫秒)

db.getCollection('conversations').find({users: {$all: ["5942328", "9082468"]}});

解释 - pastebin.com/0C11Cr9F

db.getCollection('conversations').find({users: "9163099"});

解释 - pastebin.com/CmvuDf10

问题列表:

  1. 为什么索引请求执行如此缓慢?
  2. mongodb服务器或进程重启后如何预热索引? Touch() 指令在 WiredTiger 引擎中不再可用。

这是一个附加信息

db.stats();

结果 - pastebin.com/9JZF8ChQ

db.getCollection('conversations').stats(); 

结果 - pastebin.com/17yV4Fsi

db.conversations.getIndexes();

结果 - pastebin.com/xHecpw00

关于服务器的信息:

lscpu - pastebin.com/k7wUE4gH

lshw -short - pastebin.com/w5XYuY3U

假设从 HDD 读取操作是一个瓶颈,SSD 可以解决这个问题,但没有机会测试它。

提前致谢。

最佳答案

  1. 我认为问题在于您拥有大量数据。
  2. 您的索引位于数组字段上,这效率不高,因为 MongoDB 索引数组的每个值时您的索引变得非常大,因此您可以查询单个项目。

您可能希望研究分片以将数据拆分到多个实例,但请注意,您不能选择 users field as shard key

关于MongoDB。为什么索引请求执行如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40766841/

相关文章:

mongodb - 使用更新操作将字段转换为数组

javascript - mongodb的mapreduce函数

node.js - 树状 Mongoose 文档结构的递归

mongodb - 我将如何在 MongoDB 中设计这个模式?

mongodb - Docker-MongoDB 中的身份验证问题

javascript - 如何使用 Node.js Mongoose 删除文档?

javascript - 如何解析 Node.js 和 mongodb 查询中的对象数组?

javascript - Nodejs中如何处理异步事务

使用 upsert 和多语法更新 Mongodb

node.js - Mongoose - 如何将模式中间件接入 'init' 事件?