i want to store some data in my neo4j database. i use spring-data-neo4j for that.
my code is like the follow:
for (int i = 0; i < newRisks.size(); i++) {
myRepository.save(newRisks.get(i));
System.out.println("saved " + newRisks.get(i).name);
}
私の newRisks-array には、約 60000 個のオブジェクトと 60000 個のエッジが含まれています。すべてのノードとエッジには 1 つのプロパティがあります。このループの長さは約 15 ~ 20 分ですが、これは正常ですか? Java VisualVM を使用していくつかのボトルネックを検索しましたが、平均 CPU 使用率は 10 ~ 25% (4 コアの場合) であり、ヒープは半分以下でした。
この操作を後押しするオプションはありますか?
編集:追加は、myRepository.save(newRisks.get(i));
最初の出力が来る数分前に、jvm の最初の呼び出しで assleep fpr に落ちることです
2番目の編集:
クラスリスク:
@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;
}