使用neo4j @QueryResult的性能问题

时间:2014-04-30 10:37:38

标签: performance neo4j spring-data-neo4j

我使用neo4j和弹簧数据。 当我使用返回多个字段的查询时,我通常会尝试返回一个接口(@QueryResult注释),因此我不需要在之后转换结果。

出于某些原因,随着结果数量的增长,我的表现会非常糟糕。
有没有人有解决方案?

我通过休息使用neo4j 2.0.1,为neo4j 3.0.0使用spring数据
数据集非常小,少于100个节点,结果集最多约10个记录。

1 个答案:

答案 0 :(得分:1)

Spring-Data-Neo4j-Rest非常慢,因为它是为嵌入式数据库构建的。

以下修复程序可以帮助您提高应用程序的性能,同时仍然利用SDN的功能为您反序列化对象。

  1. 编写自己的cypher查询,并使用@QueryResult更多来检索连接的节点。不要使用@Fetch注释。当SDN可以在单个查询中完成时,SDN将进行额外的REST调用以尝试序列化整个对象图。
  2. 例如,

    public class Person {
    
        @RelatedTo (type = "MARRIED", direction = BOTH)
        private Person partner;
    
    }
    
    @QueryResult
    public class PersonResult {
    
         @ResultColumn("person")
         private Person person;
    
         @ResultColumn("partner")
         private Person partner;
    
    }
    

    在您的存储库中,然后获取结果

    public interface PersonRepository extends GraphRepository <Person> {
           @Query ("MATCH person-[m:MARRIED]-partner RETURN person, partner)
           List<PersonResult> findAllMarried ();
    }
    
    1. 再次删除@FETCH注释。
    2. 您的对象以这种方式批量序列化。当SDN团队找到解决此问题的更好方法时,这非常有效。