添加索引后,使用node.js驱动程序,MongoDB .toArray()异常缓慢

时间:2019-03-20 02:28:55

标签: node.js mongodb

我知道对此还有其他一些问题,但似乎没有一个真正的答案。

我有一个简单的集合,其中包含少于10个文档(目前在测试时,最终将多达10万个文档),每个文档都非常小(根据Compass的平均文档大小为200B〜)。

做一个简单的collection.find({}).toArray()有时会花费100毫秒!在我看来这很荒谬。如果我连续运行20次(每次间隔一次),则有时需要100毫秒,有时需要1毫秒,最常见的是介于50到60毫秒之间的时间。

什么可能导致此差异?似乎如果是相同的文档,那么驱动程序将其转换为javascript对象所花费的时间将是相当一致的。另外,为什么有时可能需要100毫秒才能将少于2kb的文档转换为javascript对象?例如,JSON.parse()花费0.1毫秒从相同大小的字符串中执行相同的任务。

我过去曾经使用过MongoDB,这是几个项目,并且不记得曾经遇到过这样的性能问题。

是否有比toArray()更好的方法将此数据发送回客户端。我缺少一些妨碍性能的东西吗?

-编辑-

我对该集合有7个索引(6减去_id)。

我创建了一个没有索引的相同集合(_id除外),并向其中添加了相同数量的文档。在无索引集合上运行完全相同的collection.find({}).toArray()持续需要1毫秒或更短的时间!因此,以某种方式向集合中添加索引会大大降低toArray()的速度。

据我了解,添加索引会增加insert()的时间,但不会影响find(),除了会提高使用索引的查询性能。那么,为什么添加一些索引后find().toArray()的性能会急剧下降?

0 个答案:

没有答案