私のneo4jデータベースにいくつかのデータを保存したい。私はspring-data-neo4jを使っています。CRUDRepositoryの保存方法は非常に遅いですか?
私のコードは次のようなものです:
for (int i = 0; i < newRisks.size(); i++) {
myRepository.save(newRisks.get(i));
System.out.println("saved " + newRisks.get(i).name);
}
マイnewRisksアレイは60000個のオブジェクトと60000のエッジ年頃含まれています。すべてのノードとエッジには1つのプロパティがあります。 このループの持続時間は約15〜20分ですが、これは正常ですか? Java VisualVMを使用していくつかのボトルネックを検索しましたが、私の平均CPU使用率は10%〜25%(4コア)でした。ヒープが半分以下でした。
この操作を強化するオプションはありますか?
EDIT:追加され、myRepository.save(newRisks.get(i));
の最初の呼び出しに最初の出力の前にいくつかの分FPR JVM落下assleepが来ている
第二EDIT:
クラスリスク:
@NodeEntity
public class Risk {
//...
@Indexed
public String name;
@RelatedTo(type = "CHILD", direction = Direction.OUTGOING)
Set<Risk> risk = new HashSet<Risk>();
public void addChild(Risk child) {
risk.add(child);
}
//...
}
リスクを作成する:
@Autowired
private Repository myRepository;
@Transactional
public Collection<Risk> makeSomeRisks() {
ArrayList<Risk> newRisks = new ArrayList<Risk>();
newRisks.add(new Risk("Root"));
for (int i = 0; i < 60000; i++) {
Risk risk = new Risk("risk " + (i + 1));
newRisks.get(0).addChild(risk);
newRisks.add(risk);
}
for (int i = 0; i < newRisks.size(); i++) {
myRepository.save(newRisks.get(i));
}
return newRisks;
}
[documentation](http://static.springsource.org/spring-data/data-neo4j/docs/2.0.0.RC1/api/org/springframework/data/neo4j/repository/CRUDRepository)によると、 html)、CRUDRepository.saveは引数としてIterableをとることができます。なぜmyRepository.save(newRisks)だけではないのですか? – Thomas
私はこれを試して、それも動作します。しかし、その高速ではありません。だから私は見ることができます、彼は死んでいません^^ – hilbert
あなたのクラスの構造とそれが参照するノードエンティティと関係エンティティを表示できますか?リスクインスタンスの作成方法は? –