我試過一些小的修改後給出here的例子 - 主要是我添加了一個沒有匹配的where子句 - 用於實驗目的。Neo4j密碼查詢性能低下
在我的系統(1.9.M04 - 的Java 6u43 - Ubuntu的12.04 - AMD羿龍II 1090T -X6)的簡單查詢
隨着數據庫只是1個節點(也嵌入)了262毫秒。顯然有什麼問題。可能是什麼問題呢 ?
感謝
public void test()
{
GraphDatabaseService db = g = new GraphDatabaseFactory().newEmbeddedDatabase("./neo4j1test");
long id;
Transaction tx = db.beginTx();
try
{
Node refNode = db.createNode();
id = refNode.getId();
refNode.setProperty("name", "reference node");
tx.success();
}
finally
{
tx.finish();
}
ExecutionEngine engine = new ExecutionEngine(db);
ExecutionResult result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name");
long time = System.currentTimeMillis();
result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name");
time = (System.currentTimeMillis() - time);
System.out.println("Time taken : " + time + " ms.");
}
也許它只是Neo4j的引導開銷,你應該嘗試重複查詢多次,在這種情況下,我認爲執行時間應該是顯著降低。 – remigio 2013-03-15 08:06:10
首先嚐試預熱高速緩存。運行這個命令幾次:'start n = node(*)return count(n); start r = rel(*)return count(r)'。第二,你如何衡量時間?這是由密碼輸出給出的時間還是僅僅是特定代碼行之前和之後的時間?在第二種情況下,延遲可能在您的應用程序和服務器之間 – ulkas 2013-03-15 08:22:51
好吧,這裏是它的行爲 - 我已經測量了第二次查詢執行的時間(期待第一次執行會初始化內部緩存等)。但這裏有所不同。這是第三次執行它需要更少的時間。我沒有得到相同查詢的第三次執行的特別之處。 remigio感謝您的提示,ulkas,我在嵌入模式下使用 – Shilu 2013-03-15 08:43:11