簡體   English   中英

JMH-對標Neo4j

[英]JMH - Benchmarking Neo4j

我目前正在嘗試使用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);    
    }

該實現直接來自文檔

但是,第二種數據模型則相反,即使用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代碼與上面的代碼幾乎相同,只是JDBC URL不同。

Datagrip中MySQL查詢的執行時間:

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

顯然,我執行頻率越高,速度越快,但是在Datagrip中它的最低執行時間是45ms。 甚至還不接近我使用JMH測量的1.2 ms / op。

可能是緩存問題? 還是測量不正確?

您還正在測量在JMH中建立與數據庫的連接所花費的時間,而與數據庫直接交互則不需要。 在執行性能測試之前,嘗試將Connection重構為一個字段並進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM