Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringDataNeo4J4对于大型分层查询速度非常慢_Neo4j_Cypher_Spring Data Neo4j_Spring Data Neo4j 4 - Fatal编程技术网

SpringDataNeo4J4对于大型分层查询速度非常慢

SpringDataNeo4J4对于大型分层查询速度非常慢,neo4j,cypher,spring-data-neo4j,spring-data-neo4j-4,Neo4j,Cypher,Spring Data Neo4j,Spring Data Neo4j 4,我目前使用的是SpringDataNeo4j–4.1.0.M1,有一个用例,我需要获取一个子图(实际上是一棵树),并以类似于此的层次结构返回它(这些子图通常大约有500个节点,深度未指定): ... 数据模型: @NodeEntity public abstract class Event { @GraphId private Long id; private Long dbId; private String displayName; ... o

我目前使用的是SpringDataNeo4j–4.1.0.M1,有一个用例,我需要获取一个子图(实际上是一棵树),并以类似于此的层次结构返回它(这些子图通常大约有500个节点,深度未指定):


...
数据模型:

@NodeEntity
public abstract class Event {

    @GraphId
    private Long id;

    private Long dbId;
    private String displayName;
    ... other relationships and properties
}

@NodeEntity
public class Pathway extends Event {

    @Relationship(type="hasEvent", direction = Relationship.OUTGOING)
    private List<Event> hasEvent;
    ... other relationships and properties
}

@NodeEntity
public class Reaction extends Event {

    ... other relationships and properties
}
@NodeEntity
公共抽象类事件{
@格拉希德
私人长id;
私有长dbId;
私有字符串显示名;
…其他关系和属性
}
@节点性
公共课路径扩展事件{
@关系(type=“hasEvent”,direction=Relationship.OUTGOING)
私人活动;
…其他关系和属性
}
@节点性
公众阶级的反应扩大了这一事件{
…其他关系和属性
}
为了解决这个问题,我创建了以下查询:

String query = "Match (n:Pathway{dbId:123456})-[r:hasEvent*]->(m:Event) Return n,r,m";
Result result =  neo4jTemplate.query(query,Collections.<~>emptyMap());
return result.iterator().next().get("n");
stringquery=“匹配(n:Pathway{dbId:123456})-[r:hasEvent*]->(m:Event)返回n,r,m”;
Result=neo4jTemplate.query(query,Collections.emptyMap());
返回result.iterator().next().get(“n”);
这正在工作,并按预期返回结果。唯一的问题是速度。在使用Neo4j浏览器测试查询时,我在50-100ms内得到了一个结果。使用SDN,Spring将结果映射到对象需要2秒以上的时间


现在的问题是:我有没有办法在Spring中加速这个查询,或者有没有更好的解决方案,我可以使用类似嵌套集合的方式在Cypher中返回这个层次结构(因为我只需要名称和ID,而不需要对象本身)?

似乎非常慢。使用手动查询而不是模板方法有什么原因吗?我原以为您可以使用
neo4jTemplate.load(Pathway.class,Pathway.getId(),-1)
其中-1表示获取深度(在本例中为无限)。您是否检查了返回的结果数量,并且您是否能够分析代码以找出其性能不好的地方?如果仅使用深度参数,则无法指定特定关系(hasEvent)来遍历图形(否则可能会加载整个图形)。在这种特定情况下,将返回527个对象。我认为一个问题可能是,即使我忽略了所有其他关系,对象仍然具有丰富的信息(每个对象大约有5-10个填充属性)。我还并没有分析代码,只是记录了执行
Result=neo4jTemplate.query(query,Collections.emptyMap())的时间
String query = "Match (n:Pathway{dbId:123456})-[r:hasEvent*]->(m:Event) Return n,r,m";
Result result =  neo4jTemplate.query(query,Collections.<~>emptyMap());
return result.iterator().next().get("n");