मेरे पास डेटा है जो डिस्क से स्ट्रीम किया गया है और जावा एप्लिकेशन द्वारा स्मृति में संसाधित किया गया है और अंततः SQL सर्वर में कॉपी करने की आवश्यकता है। डेटा काफी बड़ा हो सकता है (इसलिए स्ट्रीमिंग) और डालने के लिए कई 100,000 पंक्तियों की आवश्यकता हो सकती है। लगता है कि सबसे तेज़ समाधान SQL सर्वर की थोक-प्रति सुविधा का उपयोग कर रहा है। हालांकि, मुझे जावा प्रोग्रामों को आसानी से या लगभग तेज़ करने के लिए कोई रास्ता नहीं मिला है।जावा से SQL सर्वर में थोक-प्रतिलिपि करने का सबसे प्रभावी तरीका क्या है?
.NET में SqlBulkCopy वर्ग का उपयोग करना:
यहाँ कुछ तरीके कि मैं पहले से ही जांच की है कर रहे हैं। यह बहुत ही कुशल है क्योंकि आप डेटा स्रोत से सीधे डेटा स्ट्रीम कर सकते हैं और सीधे SQL सर्वर पर स्ट्रीम कर सकते हैं। इस दृष्टिकोण के साथ समस्या यह है कि आपको .NET चलाने की आवश्यकता है। शायद इसका उपयोग जावा का उपयोग .NET ब्रिज से किया जा सकता है। हालांकि, मैं रनटाइम के बीच डेटा को मार्शल करने की लागत के बारे में सोचता हूं।
बल्क INSERT TSQL कथन का उपयोग करना। इसके साथ समस्या यह है कि आपको डिस्क पर एक उचित रूप से स्वरूपित फ़ाइल बनाने की आवश्यकता है। मैंने इसका उपयोग करके जेडीबीसी के बैच सम्मिलन पर कुछ छोटे प्रदर्शन लाभ देखे हैं। इसके अलावा, यह केवल स्थानीय रूप से उपयोगी है।
डिस्क पर फ़ाइलों को लिखें और बीसीपी कमांड लाइन उपयोगिता का उपयोग करें। अभी भी जेडीबीसी बैच डालने से थोड़ा तेज है लेकिन इतना नहीं। मैं इस विधि के साथ लेनदेन का उपयोग करने की क्षमता भी खो देता हूं।
C API का उपयोग करें। फिर, बहुत ही कुशल, लेकिन आपको सी का उपयोग करने की आवश्यकता है। जेएनआई के माध्यम से इसका उपयोग करने का एक तरीका होगा। अगर वहाँ कुछ मुफ्त जावा लाइब्रेरी है जो ऐसा करता है, तो मैं इसके बारे में जानना चाहता हूं।
मैं सबसे तेज़ समाधान की तलाश में हूं। स्मृति एक मुद्दा नहीं है।
धन्यवाद!
जब आप कहते हैं कि डेटा का स्रोत जावा है - क्या आप विस्तृत कर सकते हैं? क्या जावा एप्लिकेशन/एप्लेट की याद में डेटा है? – InSane
शेन में आपके उत्तर के लिए धन्यवाद। मैंने सवाल थोड़ा और विस्तृत किया है। –