【问题标题】:JMH - Benchmarking Neo4jJMH - Neo4j 基准测试
【发布时间】:2019-02-04 21:36:40
【问题描述】:

我目前正在尝试使用 JMH 对数据库模型的 2 种不同实现进行基准测试,其中之一是 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);    
    }

实现直接取自the documentation

第二种数据模型的情况正好相反,即使用 MySQL 服务器。

DataGrip(也使用 JDBC)中的“真实”执行速度显示为 ~ 100 毫秒,而我的基准测试显示约为 1.6 毫秒/操作。

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

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

感谢任何帮助!

编辑:我更新了 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 代码与上面的代码几乎相同,只是 JDBC URL 不同。

Datagrip 中 MySQL 查询的执行时间:

1 row retrieved starting from 1 in 301ms (execution: 202ms, fetching: 99ms)

显然,我执行它的频率越高,它就越快,但它在 Datagrip 中的最低值是 45 毫秒。甚至不接近我使用 JMH 测量的 1.2 ms/op。

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

【问题讨论】:

    标签: java mysql neo4j benchmarking microbenchmark


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!这对我来说是一个愚蠢的错误!然而,它确实只下降到 18.580 ms/op(这显示为 MySQL 实现(应该需要 100ms+)显示为 1.3 ms/op。我更新了我的帖子中的代码以进一步详细说明这个问题,尤其是 MySQL比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多