Java 为什么简单的密码查询这么慢?

Java 为什么简单的密码查询这么慢?,java,eclipse,neo4j,cypher,Java,Eclipse,Neo4j,Cypher,在Oracle JDK 8和Windows 7上使用Neo4j 2.3.0社区版 我对Neo4j还不熟悉,只是在尝试如何使用Java。在Neo4j浏览器中,我使用以下语句创建了3个节点: CREATE (c:Customer {name:'King'})-[:CREATES]->(:Order {status:'created'}), (c)-[:CREATES]->(:Order {status:'created'}) 从Neo4j浏览器执行,以下查询将在200毫秒

在Oracle JDK 8和Windows 7上使用Neo4j 2.3.0社区版

我对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"));
}
Node king=db.findNode(NodeType.Customer,“name”,“king”);
Iterable kingRels=king.getrelations(RelType.CREATES);
对于(关系关系rel:kingRels){
System.out.println(rel.getEndNode().getProperty(“status”);
}
所以实际上有两件事我很惊讶:

  • 在Neo4j浏览器中运行Cypher查询似乎比在Eclipse中使用Neo4j核心Java API执行类似操作要慢得多
  • 与Neo4j浏览器解决方案以及普通Java解决方案相比,在Java代码中运行“嵌入”的Cypher查询速度非常慢

  • 我很肯定这不可能是真的。那么我做错了什么呢?

    如何度量它?如果度量整个运行时,那么您的时间包括jvm启动、数据库启动、类加载以及从磁盘加载存储文件

    记住,在浏览器中,所有这些都已运行,并已预热等

    如果确实要测量查询,请运行多次以预热,然后仅测量查询执行和结果加载


    也考虑使用指示或参数的索引或约束,例如为您的客户。名称。< /P>请尝试<代码>匹配(C:客户{Name:“King”})-[(创建)->(O:订单)并删除

    WHERE
    子句。在提出问题之前,我已经有了这一点,但性能没有变化。是否有
    客户(名称)
    订单(状态)的索引
    ?我没有任何索引,但因为我的数据库中只有3个节点和2个关系,所以索引应该不会有太大影响。我现在按照您的建议创建了索引。Neo4j浏览器中的密码查询真的变得更快了(对于Cypher查询,我在调用
    execute
    之前和之后测量
    currentTimeMillies
    。对于核心API,我测量整个try块,速度仍然快得多。我甚至从核心API开始,在一个
    main
    方法中运行了两件事。因此,我怀疑这是一个预热问题。Ne没有垂直,我运行了几次:没有明显的变化。