В настоящее время я пытаюсь сравнить 2 различных реализации модели базы данных с использованием JMH, и одна из них - Neo4j.
Проблема, с которой я сталкиваюсь, заключается в том, что измеренное время сильно отличается от времени, показанного наБраузер Neo4j.
Использование JMH:
Benchmark Mode Cnt Score Error Units
Neo4j_JDBC.run avgt 2434.298 ms/op
NEO4j_EMBEDDED.run avgt 0.316 ms/op
В браузере Neo4j:
Started streaming 1 records after 2 ms and completed after 2 ms.
Запрос один и тот же, независимо от того, использую ли я встроенный сервер илиудаленный подключен с использованием JDBC.
JMH код:
@Setup
public void setup() throws SQLException {
con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "password");
}
@TearDown
public void tearDown() throws SQLException {
con.close();
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Measurement(iterations = 1, time = 1)
@Fork(1)
public void run() throws SQLException {
String query = "query...";
Statement st = con.createStatement();
st.executeQuery(query);
}
Реализация взята прямо из документации
Противоположный случайдля второй модели данных, хотя, это использует сервер MySQL.
Там «реальная» скорость выполнения в DataGrip (которая также использует JDBC) составляет ~ 100 мс, а мой тест показывает около 1,6 мс / операций.
Я что-то упустил в своей конфигурации?
Это даже правильный способ сравнения различных систем баз данных с разными моделями?
Любая помощь приветствуется!
edit: я обновил код JMH, чтобы не измерять создание экземпляра соединения, и теперь я получаю следующие результаты при сравнении Neo4j с MySQL:
Benchmark Mode Cnt Score Error Units
MYSQL_JDBC.run avgt 1.224 ms/op
Neo4j_JDBC.run avgt 18.580 ms/op
Код MySQL почти такой же, как и выше, только сдругой URL JDBC.
Время выполнения в Datagrip для запроса MySQL:
1 row retrieved starting from 1 in 301ms (execution: 202ms, fetching: 99ms)
Очевидно, что чем чаще я его выполняю, тем быстрее он работает, но самым низким он был в Datagrip.45ms.Даже близко к 1,2 мс / оп, которые я измерял с помощью JMH.
Может это проблема с кешированием?Или это не правильно измеряет?