首页 > 解决方案 > MongoDB性能测试-基本理解-Java

问题描述

我想检查 CRUD 操作在 MongoDB 上执行的速度。

因此我用以下代码记录了时间:

long start = System.nanoTime();
FindIterable<Document> datasetFindIterable = this.collection.find(filter);
long finish = System.nanoTime();
long timeElapsed = finish - start;

我知道,FindIterable 对象带有“executionStats”和“executionTimeMillis”:

JSONObject jsonobject = (JSONObject) parser.parse(datasetFindIterable.explain().toJson())
JSONObject executionStats = (JSONObject) jsonobject.get("executionStats");
Long executionTimeMillis = (Long) executionStats.get("executionTimeMillis");

但是我有点困惑,我得到以下结果:

开始(ns) 完成(ns) 已用时间 (ns) executionTimeMillis (毫秒)
582918161918004 582918161932511 14507 1234

14507 纳秒为 0.014507 毫秒

怎么可能,executionTimeMillis (1234 ms) 比 System.nanoTime() (=0.014507 ms) 之间的差异大得多。不应该反过来吗,因为 System.nanoTime() 也需要一些时间来执行自身?

标签: javamongodbperformance

解决方案


如果我没记错的话,有可用的异步和同步 MongoDB 驱动程序。

如果您使用异步驱动程序,则可能是问题所在,即

"long finish = System.nanoTime();"

命令不等待

"FindIterable<Document> datasetFindIterable = this.collection.find(filter);"

命令返回一个值,因此时间差可能低于存储在 FindIterable 变量中的执行时间。


推荐阅读