我想在我的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