[英]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.