检索关系丰富的条目时,Spring Data Neo4j-4性能非常慢

时间:2016-04-05 11:28:30

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

我目前正在使用SpringDataNeo4j-4.1.0.M1来获取包含大约120万个节点和1200万个关系的数据集。图形背后的数据结构非常复杂和分层。总共有79个NodeEntities,其中一些可以包含超过20个@Relationship属性。

下面的层次结构示例

enter image description here

我的域名示例

@NodeEntity
public abstract class DatabaseObject implements java.io.Serializable {

    @GraphId
    private Long id;
    private Long dbId;
    private String stableIdentifier;
    private String displayName;

    @Relationship(type = "created")
    private InstanceEdit created;
    @Relationship(type = "modified")
    private List<InstanceEdit> modified
    ...

@NodeEntity
public abstract class Event extends DatabaseObject {

    private String definition;
    private List<String> names;
    private Boolean isInferred;

    @Relationship(type = "authored", direction = "OUTGOING")
    private List<InstanceEdit> authored;
    @Relationship(type = "precedingEvent")
    private List<Event> precedingEvent;
    @Relationship(type = "literatureReference")
    private List<Publication> literatureReference;
    @Relationship(type = "regulatedBy")
    private List<Regulation> regulatedBy;
    ...

@NodeEntity
public class ReactionLikeEvent extends Event {

    private Boolean isChimeric; 
    private String systematicName;
    @Relationship(type = "input")
    private List<Input> input;
    @Relationship(type = "output")
    private List<Output> output;
    ...

我的存储库的一个例子

@Repository
public interface DatabaseObjectRepository extends GraphRepository<DatabaseObject>{
    DatabaseObject findByDbId(Long dbId);
    ...

虽然Neo4j-Restful-Service或Remote-Web-Admin的查询(具有许多关系的对象的特定查询)按预期执行(最多10-100ms),但在使用条目检索条目时,查询性能会急剧下降SDN(100 - 500ms)。只有在将查询深度设置为1时才会出现此性能下降。如果查询深度为0且未返回任何关系,则响应速度很快。使用neo4j本机ID执行查询时,会创建索引并且不会更改响应时间。

对于其他用例(例如对较小对象,@ QueryResult对象或对象集合的特定查询),SDN执行得很好。我的问题特定于检索具有许多关系的对象或具有更高深度(多个)的查询的查询。糟糕的性能是由复杂的域层次结构和过于丰富的NodeEntites造成的,我是否需要减少层次结构以获得更好的性能?

感谢您的帮助

0 个答案:

没有答案