Spring Data Neo4j 4对于大型分层查询来说非常慢

时间:2016-03-22 13:59:43

标签: neo4j cypher spring-data-neo4j spring-data-neo4j-4

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

<Pathway dbId="1" displayName="Name1">
  <Pathway dbId="2" displayName="Name2">
    <Pathway dbId="3" displayName="Name3">
      <Reaction dbId="4" displayName="Name4" />
      <Reaction dbId="5" displayName="Name5" />
      <Pathway dbId="6" displayName="Name6">
          <Reaction dbId="7" displayName="Name7" />
      </Pathway>
    </Pathway>
    ...

数据模型:

@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
}

为了解决这个问题,我创建了以下查询:

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");

这是有效的,并按预期返回结果。唯一的问题是速度。在使用Neo4j-Browser测试查询时,我得到的结果在50-100ms内。使用SDN,Spring需要2秒钟才能将结果映射到对象。

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

0 个答案:

没有答案