我目前正在使用SpringDataNeo4j-4.1.0.M1来获取包含大约120万个节点和1200万个关系的数据集。图形背后的数据结构非常复杂和分层。总共有79个NodeEntities,其中一些可以包含超过20个@Relationship属性。
下面的层次结构示例
我的域名示例
@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造成的,我是否需要减少层次结构以获得更好的性能?
感谢您的帮助