我目前在Java应用程序中使用Neo4j数据库版本3.0.3,使用neo4j jdbc驱动程序版本3.0.1(是的,我知道它们不匹配,但我认为现在没问题) ,并运行非常具体的查询。在使用JDBC库编写cypher查询时,我确保在我的节点上使用标签并在我的关系上使用类型。
我的数据集是知道其他Person节点的Person节点的网络。 KNOWS关系有一个日期,以便跟踪何时建立连接。我想在两个不同的Person节点之间的路径上进行一些数据挖掘,如下所示。随着人们开始认识越来越多的人,我想看看我的终端节点是否存在未知的关系。这要求我检查起始和结束Person之间的路径上的Person节点,以及可能创建这些关系的日期。
我运行了一个非常具体的查询,至少我是这么认为的,今天在neo4j浏览器功能和我的Java代码中,
`MATCH path = (p:Person {name: "garret"})-[:KNOWS*1..6]->(p1:Person {name: "adam"}) return path`
上述查询在(garret)和(adam)之间返回了总共30条路径。 Neo4j浏览器中该查询的PROFILE显示它返回38毫秒。所以肯定看起来很闪电。
使用StatementResult对象将查询连接到我的Java代码并执行查询,我发现当我调用list()方法时,如下所示,该运行时间为 42.7秒!
List<Record> records;
StatementResult r = session.run("MATCH path = (p:Person {name: 'garret'})-[:KNOWS*1..6]->(p1:Person {name: 'adam'}) return path");
records = r.list();
我的问题是:
我正处于这个项目的早期阶段,但随着我的数据集的增长,现在获取结果的42.7秒肯定会非常显着增长。我想从社区获得一些建议,以便最大限度地减少从StatementResult检索数据的延迟。
我感谢大家提供的所有建议。