RelathionEntity にプロパティを保存しようとしています
私がここで読んだように
SDN 4.0 で @RelationshipEntity を CRUD する方法
これは、開始/終了ノードの 1 つを保存することは可能ですが、deth 0 でノードを保存する代わりに、これは非常に遅いことに気付きました (深さ 0 でノードを保存するには約 2ms かかり、深さ 1 でノードを保存するには約 1000ms かかります)。保存しようとしているノードには 4 つの関係しかありません
@RelationshipEntity として注釈が付けられたオブジェクトで session.save(...) (org.neo4j.ogm.session.Session) も試しましたが、何もしません
spring-data-neo4j 4.0.0.RELEASE と Neo4j 2.2.5 を使用しています
エンティティと関係のコードに従います。
@NodeEntity
public class EntityA{
@GraphId
private Long nodeId;
private String propertyA;
@Relationship(type = "RelationshipAB", direction = Relationship.OUTGOING)
private Set<RelationshipAB> entitiesB = new HashSet<RelationshipAB>();
}
@NodeEntity
public class EntityB{
@GraphId
private Long nodeId;
private String propertyB;
}
@RelationshipEntity(type = "RelationshipAB")
public class RelationshipAB{
@GraphId
private Long nodeId;
@StartNode
private EntityA entityA;
@EndNode
private EntityB entityB;
@Property
private String propertyAB;
}
パフォーマンスをチェックするための簡単なテスト ケースに従います。
EntityA entityA = new EntityA();
entityA.setPropertyA("propertyA");
entityARepository.save(entityA);
for (int i = 0; i < 100; i++) {
EntityB entityB = new EntityB();
entityB.setPropertyB("propertyB-" + i);
entityBRepository.save(entityB);
RelationshipAB rel = new RelationshipAB();
rel.setEntityA(entityA);
rel.setEntityB(entityB);
rel.setPropertyAB("propertyAB-" + i);
entityA.getEntitiesB().add(rel);
Date startDate = new Date();
entityARepository.save(entityA, 1);
Date endDate = new Date();
System.out.println("Time for adding " + (i + 1) + " node: " + (endDate.getTime() - startDate.getTime()) + " ms");
}
Iterator<RelationshipAB> iter = entityA.getEntitiesB().iterator();
for (int i = 0; i < 10; i++) {
iter.next();
}
iter.next().setPropertyAB("newProperty1");
Date startDate = new Date();
entityARepository.save(entityA, 1);
Date endData = new Date();
System.out.println("Time for cahnge the first relationship property: " + (endData.getTime() - startDate.getTime()) + " ms");
for (int i = 0; i < 20; i++) {
iter.next();
}
iter.next().setPropertyAB("newProperty2");
startDate = new Date();
entityARepository.save(entityA, 1);
endData = new Date();
System.out.println("Time for cahnge the second relationship property: " + (endData.getTime() - startDate.getTime()) + " ms");
for (int i = 0; i < 10; i++) {
iter.next();
}
iter.next().setPropertyAB("newProperty3");
startDate = new Date();
entityARepository.save(entityA, 1);
endData = new Date();
System.out.println("Time for cahnge the third relationship property: " + (endData.getTime() - startDate.getTime()) + " ms");
ノードの追加にかかる時間は 100 ミリ秒未満で、最初の更新 (setPropertyAB("newProperty1") の後の保存) には約 1 秒、次の更新には約 4 秒、最後の更新には約 7 秒かかります。