2009-08-03 19 views
8

के साथ थोक आवेषण मैं अपने आवेदन में एक मिश्रण वसंत/हाइबरनेट (मूल कुछ भी नहीं) का उपयोग कर रहा हूं। किसी दिए गए फीचर के लिए, मुझे अपने ओरेकल डीबी की एक तालिका में एक CSV फ़ाइल की सामग्री आयात करना होगा। अभी के लिए, मैं वस्तुओं को बनाने के juste, मैं इनमें से प्रत्येक परवसंत/हाइबरनेट

HibernateTemplate.saveOrUpdate 

कर (मैं पुनः प्राप्त करने की जरूरत है अपने नव क्रमांक आवंटित)

फिर लेन-देन, विधि के अंत में होता है का उपयोग करते हुए वसंत लेनदेन एपीआई।

सब कुछ ठीक काम करता है, प्रदर्शन है, जो कुछ 5000 के वस्तुओं के लिए सही है छोड़कर, लेकिन 100 000 के लिए नहीं ...

तो मैं विचारों इस सामग्री में तेजी लाने के लिए देखो। मैंने हाइबरनेट के साथ थोक आवेषण के बारे में सुना है, लेकिन कोई ठोस संदर्भ नहीं मिला। क्या कोई मुझे इस प्रदर्शन को अधिक प्रदर्शन के साथ करने के लिए कुछ विचार दे सकता है?

+1

यहां एक झटका होने का मतलब नहीं है, लेकिन इस पर दस्तावेज़ बहुत संक्षिप्त है और पढ़ने के लिए केवल 5 मिनट लगते हैं: http://docs.jboss.org/hibernate/stable/core/reference/en/html /batch.html – Tim

+0

लिंक के लिए धन्यवाद, जो वही है जो मैं ढूंढ रहा था। मैंने पहले कुछ शोध किए और इसे नहीं मिला, लेकिन मैं हाइबरनेट दस्तावेज में खुदाई करने के बारे में एक नौसिखिया हूं। –

उत्तर

7

कुछ सरल आप कोशिश कर सकते हैं

तो

session.flush(); 
session.clear(); 

हर 100 या 1000 आवेषण पर अमल फ्लश और सत्र स्पष्ट करने के लिए हर 100 वस्तुओं का कहना है ...।

यह हाइबरनेट सत्र को फ्लश और साफ़ करेगा और इसे बहुत बड़ा बढ़ने से रोक देगा (संभवतः आपकी 100 000 वस्तुएं इतनी लंबी क्यों लग रही हैं)।

इसके अलावा यदि आप पहचान पहचानकर्ता जनरेटर हाइबरनेट का उपयोग कर रहे हैं तो चुपचाप बैच आवेषण बंद कर देंगे। बैच आवेषण प्रदर्शन में सुधार होगा। आपको एक समय संख्या पर अपने 100 के बराबर hibernate.jdbc.batch_size कॉन्फ़िगरेशन गुण निर्दिष्ट करने की भी आवश्यकता होगी।

हाइबरनेट के साथ मैनिंग का जावा दृढ़ता इस का स्रोत था (महान पुस्तक - मेरी त्वचा को कई बार बचाया गया)।

6

आप StatelessSession का उपयोग करने पर भी विचार कर सकते हैं क्योंकि यह थोक संचालन के लिए डिज़ाइन किया गया है।

StatelessSession ss=sessionFactory().openStatelessSession(); 
Transaction tx=ss.beginTransaction(); 
+1

लिंक गलत है: https://www.hibernate.org/hib%5Fdocs/v3/api/org/hibernate/StatelessSession.html –

+0

अब तक, दोनों लिंक गलत हैं। यहां नया लिंक है: http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/StatelessSession.html – Isaac

3

कभी-कभी एक ORAXper नाखून के लिए सही हथौड़ा नहीं है। खासकर बैच ऑपरेशंस को सादे पुराने जेडीबीसी का उपयोग करके अक्सर अधिक निष्पादित किया जाता है। यह निश्चित रूप से विभिन्न स्थितियों पर निर्भर करता है लेकिन आपको इसे कम से कम एक विकल्प के रूप में देखना चाहिए और दोनों दृष्टिकोणों के प्रदर्शन की तुलना करना चाहिए।

0

यह पूरी तरह से एक डेटाबेस सम्मिलित प्रदर्शन मुद्दा नहीं है; यदि आप हजारों वस्तुओं का निर्माण कर रहे हैं और फ्लश नहीं कर रहे हैं, तो हाइबरनेट सत्र तब तक बढ़ेगा जब तक कि आप स्मृति से बाहर नहीं हो जाते।