2012-08-22 4 views
5

क्या एक ही क्वेरी के साथ डीबी में कई इकाइयां डालना संभव है? जब मैं here से एक उदाहरण का उपयोग मैं वेब डीबगरसिद्धांत 2 बैच सम्मिलित करें

UPDATED 23.08.2012

में कई प्रश्नों को देख सकते हैं मैं निम्नलिखित संबंधित लिंक मिल गया। मुझे आशा है कि यह एक बैच प्रोसेसिंग को समझने के लिए किसी के लिए मदद मिलेगी:

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. doctrine2 - How to improve flush efficiency?
  3. Doctrine 2: weird behavior while batch processing inserts of entities that reference other entities

मुख्य बातें:

कुछ लोगों को आश्चर्य हो रहा करने लगते हैं क्यों सिद्धांत बहु-सम्मिलन का उपयोग नहीं करता है ((...) में डालें मूल्य (...), (...), (...), ...

सबसे पहले, यह वाक्यविन्यास केवल mysql और नए postgresql संस्करणों पर समर्थित है। दूसरा, ऑटोऑक्रिकमेंट या सीरियल का उपयोग करते समय ऐसे बहु-सम्मिलन में जेनरेट किए गए पहचानकर्ताओं को पकड़ने का कोई आसान तरीका नहीं है और ऑरम को ऑब्जेक्ट्स के प्रबंधन के पहचानकर्ताओं की आवश्यकता होती है। अंत में, प्रदर्शन डालना शायद ही कभी ओआरएम की बाधा है। सामान्य प्रविष्टियां अधिकांश स्थितियों के लिए पर्याप्त तेज़ी से अधिक हैं और यदि आप वास्तव में तेज़ थोक आवेषण करना चाहते हैं, तो बहु-सम्मिलन वैसे भी सबसे अच्छा तरीका नहीं है, यानी पोस्टग्रेस सीओपीवाई या माइस्क्ल लोड डेटा इन्फ्लू तेजी से परिमाण के कई आदेश हैं ।

ये कारण हैं कि यह एक ऐसे अमूर्तता को लागू करने के प्रयास के लायक नहीं है जो में एक ओआरएम में MySQL और postgresql पर बहु-प्रविष्टियां करता है। मुझे आशा है कि कुछ प्रश्नचिह्न साफ़ हो जाएंगे।

उत्तर

0

मुझे लगता है कि कई सम्मिलित बयान होंगे, लेकिन प्रति "फ्लश" कॉल डेटाबेस में केवल एक ही क्वेरी होगी।

यहाँ उल्लेख किया है http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

प्रत्येक "जारी रहती है" एक ऑपरेशन वर्तमान UnitOfWork में जोड़ देगा, तो यह EntityManager # फ्लश (करने के लिए कॉल) जो वास्तव में (डेटाबेस के लिए लिखेंगे सभी के संचालन encapsulating है एक लेनदेन में यूनिटऑफवर्क)।

लेकिन मैंने यह जांच नहीं की है कि ऊपर वर्णित व्यवहार वास्तविक व्यवहार है।

सादर, क्रिस्टोफ़

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन मुझे यकीन है कि 'प्रति" फ्लश "call' डेटाबेस के लिए केवल एक ही प्रश्न है, क्योंकि मैं निष्पादन के समय प्रत्येक सम्मिलित बयान के लिए देख सकते हैं नहीं कर रहा हूँ । इसका मतलब है कि प्रत्येक INSERT कथन डीबी को एक प्रश्न है। मैंने अपना प्रश्न अपडेट किया – Mikhail