java - 如何测量我的 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 或各种“时间戳”?
解决方案
推荐阅读
- sql - Oracle SQL:提取两个字符之间的文本
- javascript - 对组件类函数的角度 ng-change 调用未触发
- javascript - 带有 querySelectorAll 的第一个待办事项列表
- node.js - 有没有办法在没有公共 IP 的情况下托管 node.js 服务器?
- owl - 在 Protege 中添加限制
- yii2 - 从 yii2 中的动态表单按钮调用 Javascript
- ios - 获取 Swift 子目录中资源的所有 URL
- html - 隐藏溢出不适用于图像
- java - 从本地存储库获取最新版本的 jar
- amazon-web-services - AWS CloudWatch Events 在 STS 角色上触发 SNS 为跨账户代入