java - MongoDB select's/find 对于大量数据似乎具有相同的性能

标签 java mongodb mongodb-java mongo-java database

我正在使用其 native 驱动程序测量 MongoDB 的性能。 对于插入操作,我插入的越多,耗时越长。但是,通过选择,我有 500.000 个文档(在 1 个集合中),每个文档中还有 4 个其他嵌入的小文档。

我还使用 1 个子文档的条件操作执行了选择查询。选择 100 个文档(从总共 1000 个文档中)的性能是 0,007 毫秒,而选择 50000 个文档(从总共 500000 个文档中)的性能是 0,008 毫秒。

我不太明白这是怎么可能的。真的那么快吗?我正在使用 JMH 测量性能。

最佳答案

您的测试设置仅测量打开游标所需的时间,而不是实际从游标读取任何数据的时间。

当您执行 contactCollection.find(bs); 时,数据库会返回一个游标对象,但实际上还没有执行任何操作。在您从游标中检索数据之前不会发生实际查询。将行更改为 contactCollection.find(bs).toArray() 应该会强制数据库返回所有结果,让您可以测量查询时间和通过网络传递结果所需的时间并让 Java 驱动程序解析结果。

或者,您可以使用 contactCollection.find(bs).explain() 来测量操作仅在数据库级别花费的时间,还可以从数据库中获取具有一些有用性能指标的 DBObject本身。

关于java - MongoDB select's/find 对于大量数据似乎具有相同的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901023/

相关文章:

java - 节拍器android应用程序AudioTrack releaseBuffer()错误

java - 使用 Google Maps API 时不显示 'My Current Location' 按钮

node.js - Mongoose :在父级中没有引用的情况下填充

mongodb-java - 使用 Java 3 驱动程序更新 MongoDB

java - 在 MongoDB 中添加多个子文档

javascript - MongoDB (Node.js) 将数据返回到数组

java - 使用 Java 8 链接 reduce 的最佳方式

java - 如何不区分顺序地比较两个整数数组

multithreading - MongoCursor 在单独的线程中倒回

node.js - 命令插入需要身份验证