मुझे अपने सिद्धांतों को एक्सएमएल फ़ाइल (potentionaly बहुत बड़ी) एक्सएमएल फ़ाइल के अंदर रिकॉर्ड करने के लिए अद्यतन करना है। मुझे एक्सएमएल में डेटा के अनुसार कई सारे संगठनों को भी अपडेट करना होगा।सिद्धांत 2 - फ्लश दक्षता में सुधार कैसे करें?
- एक्सएमएल से डेटा प्राप्त
- डीबी से प्राप्त इकाई (यदि मौजूद नहीं है नया बनाएं)
- सेट नई इकाई गुण
- मिल चालू इकाई संघों (: यह है कि मैं क्या एक पाश के अंदर करना है गेटर रिटर्न
ArrayCollection
वस्तु) - स्पष्ट सभी संघों (
ArrayCollection::clear()
) - नई संघों (सेट पर कॉल करके उप पाश में
ArrayCollection::add()
बुला) द्वारा
- EntityManager
द्वारा इकाई जारी रहती है पाश मैं EntityManager::flush()
फोन करने के बाद।
समस्या यह है कि फ़्लशिंग एक बार में कई पंक्तियों को अद्यतन/डालने/हटाने/हटाने के बजाय बड़ी मात्रा में क्वेरी उत्पन्न करता है।
- चुनें (यह वास्तव में अब छोड़ दिया है के रूप में कोई गुण बदल ... अभी तक)
- पिछले स्पष्ट करने के लिए DELETE डीबी से
- इकाई गुण अद्यतन करने के लिए अद्यतन इकाई पाने के लिए: हर इकाई के लिए निम्नलिखित प्रश्नों क्रियान्वित कर रहे हैं संघों
- नई संघों
तो मैं 915 प्रश्नों मिल (मुझे लगता है कि यदि सभी संस्थाओं बदल जाएगा यह 1220 प्रश्नों तक हो सकती है), जो वें बनाता है सम्मिलित करने के लिए सम्मिलित करें ई बहुत धीमी आयात करें।
मैं लूप से पहले पहचानमैप और प्री-फ़ेच इकाइयों का लाभ उठा सकता हूं, लेकिन अभी भी अपडेट/डिलीट/INSERT क्वेरी हैं।
- वहाँ फ्लश विधि बेहतर अनुकूलन प्रश्नों (बहु डालने, कहां में एक से अधिक के बजाय प्रश्नों हटाएँ, आदि का उपयोग करें) जाने के लिए कोई तरीका है?
- फ्लश विधि का यह सामान्य व्यवहार है या क्या मैं कुछ गलत कर रहा हूं?
- शायद इस तरह की समस्या है कि मैं इकाई के संगठनों को कैसे अपडेट करता हूं। क्या ऐसा करने का बेहतर तरीका है? ("get/clear/add" विधि के बजाय)
- मुझे पता है कि सिद्धांत सामूहिक बैच प्रोसेसिंग के लिए नहीं है, लेकिन मुझे लगता है कि एक्सएमएल आयात के लिए इसका उपयोग करना डीबी विसंगतियों से बचने का सबसे अच्छा तरीका है जो प्रदर्शित हो सकता है एक गैर-ओआरएम दृष्टिकोण। क्या वह सही है?
- यदि ऊपर दिया गया दृष्टिकोण गलत है, तो मुझे समस्या को कैसे हल करना चाहिए?
+1 मुझे यह बताने के लिए कि मैं पागल नहीं हूं :) –
मेरे शोध के मुताबिक ओआरएम का उपयोग करते समय आयात को बेहतर अनुकूलित करने का कोई तरीका नहीं है। मैंने संभावित भविष्य googlers के जवाब में कुछ जानकारी जोड़ा है। –
$ em-> स्पष्ट() जोड़ने के बाद, दृढ़ता इतनी तेज़ी से काम करती है, पूरी तरह से मेरी समस्या हल करती है। यदि आप भी तेज प्रविष्टि चाहते हैं, तो प्रत्येक सम्मिलित क्वेरी पर इंडेक्स पुनर्निर्माण अक्षम करें। $ conn-> तैयार करें ('SET autocommit = 0;') -> निष्पादित करें(), और प्रश्नों के बाद, $ conn-> तैयार करें ('COMMIT;') -> execute(); – tomazahlin