将Neo4j 2.3.0社区版与Oracle JDK 8和Windows 7一起使用
我是Neo4j的新手,只是尝试使用Java。在Neo4j浏览器中,我使用以下语句创建了3个节点:
CREATE (c:Customer {name:'King'})-[:CREATES]->(:Order {status:'created'}),
(c)-[:CREATES]->(:Order {status:'created'})
从Neo4j浏览器执行,以下查询在200毫秒内返回:
MATCH (c:Customer)-[:CREATES]->(o:Order)
WHERE c.name = 'King'
RETURN o.status
在Eclipse中执行此操作大约需要2500毫秒,有时最长可达3000毫秒:
String query = "MATCH (c:Customer)-[:CREATES]->(o:Order) "
+ "WHERE c.name = 'King' "
+ "RETURN o.status";
Result result = db.execute(query);
这非常慢!我究竟做错了什么? 另外,我在Eclipse中运行了以下代码片段,它只用了大约50毫秒:
Node king = db.findNode(NodeType.Customer, "name", "King");
Iterable<Relationship> kingRels = king.getRelationships(RelType.CREATES);
for(Relationship rel : kingRels) {
System.out.println(rel.getEndNode().getProperty("status"));
}
所以实际上我有两件事让我感到惊讶:
我很确定这不可能是真的。那么我做错了什么?
答案 0 :(得分:0)
你如何测量它?如果你测量完整的运行时间,那么你的时间包括,jvm启动,数据库启动和类加载以及从磁盘加载存储文件。
请记住,在浏览器中,所有这些内容已经在运行,并且已经预热等等。
如果您真的想要测量查询,请多次运行以进行预热,然后仅测量查询执行和结果加载。
还要考虑使用指示的索引或约束和参数,例如:为您的customer.name。