如何衡量 Java 中数据库的性能?

How to measure performance of databases in Java?

我正在寻找一种衡量 Java 中特定数据库性能并将它们相互比较的好方法。数据库是:(NoSQL) MongoDB、CouchDB 和 Cassandra 以及 (RDBMS) MySQL、Postgresql。

我打算做一些 CRUD 测试和一些更复杂的 joins/relations 测试。 我想过使用 JMH(Java Microbenchmarking Harness),但我不知道这是否是个好主意,因为它正在测量 ops/s(每秒操作数)。 在 Java 中,有人有衡量这些数据库性能的好方法吗?或者使用 JMH 实际上是一个不错的选择?

JMH 在 Java 中是一个不错的选择。它可以测量延迟和吞吐量。

如果您需要测量并发访问,您可以自己编写。由于您在 TCP 上有较长的延迟任务,细粒度的准确性可能并不那么重要。

您可能想看看 Yahoo Cloud Services Benchmark,因为它有许多数据库的适配器。

我做了一些与您正在寻找的非常相似的事情。我有一个使用 Redis、Cassandra、Solr 和(基于配置)MySql 或 PostGreSql 的开源新闻提要微服务。该服务提供一个 RESTful 接口,提供对参与者、朋友、出站和入站帖子的 CRUD 样式访问,并将每个请求的持续时间发布到 Kafka。还有一个运行此服务的负载测试应用程序。另一个应用程序使用这些 Kafka 消息并计算每分钟吞吐量、平均值、中位数和第 95 个百分位数,并使用该信息更新 Elastic Search。我 运行 反复试验,我在 AWS 中完成了整个过程。一个 运行 将与 MySql 一起使用,然后下一个将与 PostGreSql 一起使用。这是唯一的区别。然后我对比了性能数据。

查看 MySql vs PostGreSql vs Docker for the results of the testing and my github repo 所有源代码。