मैं अपने neo4j डेटाबेस में कुछ डेटा स्टोर करना चाहता हूं। मैं इसके लिए वसंत-डेटा-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 मिनट है, क्या यह सामान्य है? मैंने कुछ बाधाओं को खोजने के लिए जावा विजुअलVM का उपयोग किया, लेकिन मेरा औसत सीपीयू उपयोग 10 - 25% (4 कोर का) था और मेरा ढेर आधे से भी कम था।
इस ऑपरेशन को बढ़ाने के लिए कोई विकल्प हैं?
संपादित करें: अतिरिक्त है, myRepository.save(newRisks.get(i));
के पहले फोन पर पहले उत्पादन से पहले कुछ मिनट fpr JVM गिरने assleep आ रहा है
दूसरा संपादित करें:
कक्षा जोखिम:
@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। एचटीएमएल), CRUDRepository.save एक तर्क के रूप में एक Iterable ले सकते हैं। क्यों न सिर्फ myRepository.save (newRisks)? – Thomas
मैंने कोशिश की और यह भी काम करता है। लेकिन, यह तेज़ नहीं है। इसलिए मैं देख सकता हूं, वह मर नहीं गया है ^^ – hilbert
क्या आप अपनी कक्षा की संरचना और किसी भी नोड-संस्थाओं और संबंध-संस्थाओं को दिखा सकते हैं जो इसका संदर्भ है। और आपके जोखिम के उदाहरणों के निर्माण की विधि? –