Java JMH-基准Neo4j

Java JMH-基准Neo4j,java,mysql,neo4j,benchmarking,microbenchmark,Java,Mysql,Neo4j,Benchmarking,Microbenchmark,我目前正在尝试使用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

我目前正在尝试使用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)中的“实际”执行速度显示为~100ms,而我的基准测试显示大约为1.6ms/ops

我的配置中是否缺少某些内容

这是用不同模型对不同数据库系统进行基准测试的正确方法吗

感谢您的帮助

编辑:我更新了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代码与上面的代码基本相同,只是使用了不同的JDBCURL

MySQL查询在Datagrip中的执行时间:

1 row retrieved starting from 1 in 301ms (execution: 202ms, fetching: 99ms)
显然,我执行它的频率越高,速度就越快,但Datagrip中的最低速度是45毫秒。甚至不接近使用JMH测量的1.2 ms/op I


这可能是缓存问题吗?还是测量不正确?

您还测量了在JMH中建立到数据库的连接所需的时间,而直接与数据库交互则不正确。尝试将连接重构为一个字段,并在执行性能测试之前进行设置。

非常感谢!这对我来说是个愚蠢的错误!然而,它只下降到了18.580 ms/op(显示为),而MySQL实现(应该需要100 ms+)显示为1.3 ms/op。我在帖子中更新了代码,以进一步阐述这个问题,特别是MySQL比较