我试过一些小的修改后给出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