Как измерить производительность баз данных в Java?

Я ищу хороший способ измерить производительность отдельных баз данных в Java и сравнить их друг с другом. Базы данных: (NoSQL) MongoDB, CouchDB и Cassandra, а также (RDBMS) MySQL, Postgresql.

Я планирую сделать некоторые тесты CRUD и некоторые более сложные тесты соединений / отношений. Я думал об использовании JMH (Java Microbenchmarking Harness), но я не знаю, является ли это хорошей идеей, поскольку он измеряет число операций в секунду (операций в секунду). У кого-нибудь есть хороший совет по измерению производительности этих баз данных в Java? Или использование JMH на самом деле хороший вариант?

2 ответа

Решение

JMH - хороший вариант в Java. Он может измерять как задержку, так и пропускную способность.

Если вам нужно измерить одновременный доступ, вы можете написать свой собственный. Поскольку у вас есть задачи с длительным временем ожидания по TCP, точная зернистость может быть не такой важной.

Возможно, вы захотите взглянуть на Yahoo Cloud Services Benchmark, так как он имеет адаптеры для ряда баз данных.

Я сделал что-то очень похожее на то, что вы ищете. У меня есть микросервис с открытым исходным кодом, который использует Redis, Cassandra, Solr и (в зависимости от конфигурации) MySql или PostGreSql. Эта служба отображает интерфейс RESTful, который обеспечивает доступ в стиле CRUD для участников, друзей, исходящих и входящих сообщений и публикует продолжительность каждого запроса в Kafka. Существует также приложение нагрузочного тестирования, которое осуществляет эту услугу. Другое приложение использует эти сообщения Kafka и вычисляет пропускную способность в минуту, среднее значение, медиану и 95-й процентиль и обновляет Elastic Search этой информацией. Я проводил повторные испытания, где я выдержал все это в AWS. Один прогон будет с MySql, затем следующий будет с PostGreSql. Это единственная разница. Затем я сравнил данные производительности.

Проверьте MySql против PostGreSql против Docker для результатов тестирования и моего репозитория github для всего исходного кода.

Другие вопросы по тегам