Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加索引后,node.js驱动程序的MongoDB.toArray()异常缓慢_Node.js_Mongodb - Fatal编程技术网

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

添加索引后,node.js驱动程序的MongoDB.toArray()异常缓慢,node.js,mongodb,Node.js,Mongodb,我知道在这方面还有其他一些问题,但似乎没有一个能真正回答 我有一个简单的集合,里面只有不到10个文档(目前正在测试中,最终将达到100k),每个文档都非常小(根据Compass,文档的平均大小是200B~) 执行一个简单的集合.find({}).toArray()有时需要100毫秒!我觉得这很荒谬。如果我连续运行20次(每一次之间有一个停顿),有时需要100毫秒,有时需要1毫秒,通常大约在50-60毫秒之间 什么可能导致这种差异?如果是相同的文档,那么驱动程序将其转换为javascript对象所

我知道在这方面还有其他一些问题,但似乎没有一个能真正回答

我有一个简单的集合,里面只有不到10个文档(目前正在测试中,最终将达到100k),每个文档都非常小(根据Compass,文档的平均大小是200B~)

执行一个简单的
集合.find({}).toArray()
有时需要100毫秒!我觉得这很荒谬。如果我连续运行20次(每一次之间有一个停顿),有时需要100毫秒,有时需要1毫秒,通常大约在50-60毫秒之间

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

我在过去使用过MongoDB is的几个项目,不记得有过这样的性能问题

是否有比
toArray()
更好的方法将此数据发送回客户端。是否有我遗漏的妨碍性能的东西

--编辑--

我在该集合上有7个索引(6减去_id)

我创建了一个没有索引的相同集合(除了_id),并向其中添加了相同数量的文档。在无索引集合上运行完全相同的
集合.find({}).toArray()
始终需要1ms或更短的时间!因此,不知何故,向集合中添加索引会大大降低toArray()的速度


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

您是否在同一个MongoDB实例中创建了相同的集合?您使用的内存大小是多少?您使用的是什么存储引擎?您是否运行了其他读取查询,这些查询在不同的集合上返回了大量数据?@Mani,是的,它在同一个实例中。在带有16GB内存的MacBook pro上开发。WireTiger,MongoDB的最新版本。在我进行这些测试时,没有对数据库执行任何其他操作。@delashum我怀疑它与部署它的环境有关。您是否在独立EC2实例中尝试过此实验,以消除后台任务、内存压力等变量。?如果你在一个更受控制的环境中看到这一点,那会很有趣。@KevinAdistambha好的,这是值得研究的。我还不太相信这一点,因为如果我监控我的机器内存消耗和CPU水平,同时发出这些请求,它们看起来相当空闲。在接下来的几天里,我将创建一个实例并对其进行测试。@delashum谢谢。如果您在受控环境中发现相同行为,请共享您的步骤、文档、索引等,以便复制。