AFAIK fe/be में सर्वर-साइड बैचिंग नहीं है। प्रोटोकॉल
, इसलिए PgJDBC इसका उपयोग नहीं कर सकता। . अपडेट करें :अच्छा, मैं गलत था। PgJDBC (9.3 तक सटीक) करता है सर्वर को प्रश्नों के बैच भेजें यदि उसे जेनरेट की गई कुंजियों को लाने की आवश्यकता नहीं है . यह प्रत्येक व्यक्तिगत क्वेरी के बाद सर्वर के साथ समन्वयित किए बिना भेजें बफर में प्रश्नों का एक समूह कतारबद्ध करता है।
देखें:
- समस्या #15:जेनरेट की गई कुंजियां लौटाते समय बैचिंग सक्षम करें
- समस्या #195:PgJDBC उन बैचों को पाइपलाइन नहीं करता है जो जेनरेट की गई कुंजियां लौटाते हैं
यहां तक कि जब जेनरेट की गई कुंजियों से विस्तारित क्वेरी का अनुरोध किया जाता है प्रोटोकॉल यह सुनिश्चित करने के लिए उपयोग किया जाता है कि क्वेरी टेक्स्ट को हर बार भेजने की आवश्यकता नहीं है, केवल पैरामीटर।
सच कहूँ तो, JDBC बैचिंग किसी भी मामले में एक अच्छा समाधान नहीं है। ऐप डेवलपर के लिए इसका उपयोग करना आसान है, लेकिन प्रदर्शन के लिए बहुत उप-इष्टतम है क्योंकि सर्वर को अभी भी प्रत्येक कथन को अलग-अलग निष्पादित करना है - हालांकि पार्स नहीं और योजना उन्हें व्यक्तिगत रूप से तब तक जब तक आप तैयार कथनों का उपयोग करते हैं।
यदि ऑटोोकॉमिट चालू है, तो प्रदर्शन बिल्कुल दयनीय होगा क्योंकि प्रत्येक कथन एक प्रतिबद्धता को ट्रिगर करता है। यहां तक कि ऑटोकॉमिट बंद होने के बावजूद बहुत सारे छोटे बयान विशेष रूप से तेज़ नहीं होंगे, भले ही आप राउंड-ट्रिप देरी को खत्म कर सकें।
बहुत सारे आसान UPDATE
. के लिए एक बेहतर समाधान यह हो सकता है:
COPY
नया डेटाTEMPORARY
. में याUNLOGGED
मेज़; औरUPDATE ... FROM
का उपयोग करें करने के लिएUPDATE
एकJOIN
के साथ कॉपी की गई तालिका के विरुद्ध
कॉपी के लिए, देखें पीजीजेडीबीसी दस्तावेज़
और COPY
सर्वर डॉक्स में दस्तावेज़ीकरण
।
आप अक्सर पाएंगे कि चीजों में बदलाव करना संभव है, ताकि आपके ऐप को उन सभी लोगों को UPDATE
भेजने की आवश्यकता न पड़े। बिल्कुल।