我知道对此还有其他一些问题,但似乎没有一个真正的答案。
我有一个简单的集合,其中包含少于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()
的性能会急剧下降?