बैचों के संबंध में PgJDBC की कुछ सीमाएँ हैं:
-
सभी अनुरोध मान और सभी परिणाम स्मृति में संचित होने चाहिए। इसमें बड़े ब्लॉब/क्लोब परिणाम शामिल हैं। तो मुक्त स्मृति बैच आकार के लिए मुख्य सीमित कारक है।
-
PgJDBC 9.4 तक (अभी तक जारी नहीं) , जनरेट की गई कुंजियों को लौटाने वाले बैच हमेशा प्रत्येक प्रविष्टि के लिए एक राउंड ट्रिप करते हैं , इसलिए वे व्यक्तिगत कथन निष्पादन से बेहतर नहीं हैं।
-
यहां तक कि 9.4 में, उत्पन्न कुंजी को वापस करने वाले बैच केवल तभी लाभ प्रदान करते हैं जब उत्पन्न मान सीमित आकार के हों। एक ही
text
,bytea
या अप्रतिबंधितvarchar
अनुरोधित परिणाम में फ़ील्ड ड्राइवर को प्रत्येक निष्पादन के लिए एक राउंड ट्रिप करने के लिए बाध्य करेगा ।
बैचिंग का लाभ नेटवर्क राउंड ट्रिप में कमी है। तो यदि आपका डीबी आपके ऐप सर्वर पर स्थानीय है तो बहुत कम बिंदु है। बढ़ते बैच के आकार के साथ कम रिटर्न होता है, क्योंकि नेटवर्क प्रतीक्षा में लगने वाला कुल समय जल्दी से कम हो जाता है, इसलिए अक्सर बैचों को जितना संभव हो उतना बड़ा बनाने की कोशिश करने पर जोर देना काम नहीं है।
यदि आप बल्क-लोडिंग डेटा कर रहे हैं, तो COPY
. का उपयोग करने पर गंभीरता से विचार करें इसके बजाय एपीआई, PgJDBC के CopyManager
. के माध्यम से , PgConnection
. के माध्यम से प्राप्त किया गया इंटरफेस। यह आपको बहुत कम क्लाइंट/सर्वर राउंड ट्रिप के साथ तेजी से बल्क-लोडिंग के लिए सर्वर पर CSV जैसा डेटा स्ट्रीम करने देता है। दुर्भाग्य से, यह उल्लेखनीय रूप से अंडर-डॉक्यूमेंटेड है - यह मुख्य PgJDBC डॉक्स में बिल्कुल भी प्रकट नहीं होता है, केवल API डॉक्स में
.