Я хочу сохранить некоторые данные в моей базе данных neo4j.для этого я использую spring-data-neo4j.
мой код выглядит следующим образом:
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 для поиска некоторых узких мест, но мое среднее использование ЦП составляло 10-25% (из 4 ядер), и моя куча была заполнена менее чем наполовину.
Есть какие-либо варианты для усиления этой операции?
РЕДАКТИРОВАТЬ: дополнительно при первом вызове myRepository.save(newRisks.get(i));
падение JVM 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;
}