首页 > 解决方案 > 如何测量我的 Java + MongoDB 应用程序操作的毫秒/纳秒性能?

问题描述

目标是测量我的 Java 应用程序在不同的 Mongo 数据库(相同的集合但结构不同的文档)上运行的单个查询(插入、延迟、更新等)的性能。对于每个数据库上的每种类型的操作(插入、更新等),查询(在 java 中执行)都是相同的。

我采用的解决方案是测量从方法开始到结束所经过的时间。

例如,我将向您展示我是如何计算插入操作的时间的:

 long total_ms = 0;     
    
    for (int i = 0; i < number_of_insert; i++) {
        
        long start = System.nanoTime();
        
        mongo_export.Insert(new Document().put("Name", "Sam"));  //Insert Function
        
        long end = System.nanoTime();
        
        total_ms = end - start;
        
    }
    
    total_ms = TimeUnit.NANOSECONDS.toMillis(total_ms);

我使用这个解决方案是因为我不能使用 MongoDB 的“数据库探查器”,因为是“小”操作,毫秒是 1 或 0,因此我不能使用纳秒,因为探查器中不存在它们(与队列中的解释相同)查询)。

问题是,例如在 3 个数据库中依次尝试 N 次 1000 次插入,时间(尤其是前 2 次尝试)彼此之间非常不同。例子:

/**
Time 1 is for DB 1, Time 2 for DB 2, Time3 for DB 3.

Time 1: 1055 ms
Time 2: 887 ms
Time 3: 1177 ms

Time 1: 880 ms
Time 2: 783 ms
Time 3: 882 ms

Time 1: 609 ms
Time 2: 603 ms
Time 3: 938 ms

Time 1: 623 ms
Time 2: 577 ms
Time 3: 698 ms

Time 1: 593 ms
Time 2: 590 ms
Time 3: 724 ms

Time 1: 604 ms
Time 2: 611 ms
Time 3: 790 ms

*/

这是什么原因?为什么时代差异如此明显?

您是否知道其他计算这些时间的方法,而不使用 Mongo 的 Profiler 或各种“时间戳”?

标签: javamongodb

解决方案


推荐阅读