我想在我的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個邊緣。每個節點和邊都有一個屬性。 這個循環的持續時間大約是15-20分鐘,這是正常的嗎? 我使用Java VisualVM來搜索一些瓶頸,但是我的平均CPU使用率是4 - 核心的10 - 25%,我的堆少於一半。
有什麼辦法可以加強這個操作?
編輯:額外的,對myRepository.save(newRisks.get(i));
第一次調用JVM的下降assleep FPR第一輸出前幾分鐘被正在添加
第二個編輯:
類風險:
@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;
}
根據[文檔](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 2012-03-05 14:51:16
我試過了,它也有效。但是,它不會更快。所以我可以看到,他沒有死^^ – hilbert 2012-03-05 14:54:57
你能否展示你的類的結構以及它引用的任何節點實體和關係實體。你的Risk實例的構造方法是什麼? – 2012-03-06 07:48:05