आप JDBC बैच आवेषण उपयोग कर सकते हैं।
PreparedStatement ps = cn.prepareStatement("INSERT INTO....");
for (int i = 0; i < 1000; i++) {
ps.setString(1, "value-" + i); // Set values
ps.addBatch(); // Add this to the batch
ps.clearParameters(); // Reset the parameters
}
ps.executeBatch();
हालांकि MySQL के बैच डालने कार्यक्षमता देशी रूप का समर्थन नहीं करता है, तो उचित प्रदर्शन आप अपने mysql JDBC विन्यास को rewriteBatchedStatements=true
जोड़ने की आवश्यकता होगी पाने के लिए।
एक MySQL विशिष्ट बैच डालने वाक्यविन्यास भी है जिसका उपयोग आप एक बड़ी SQL स्ट्रिंग बनाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं। मैं दोनों कोशिश करता हूं और प्रदर्शन का परीक्षण करता हूं।
INSERT INTO x (a,b)
VALUES ('1', 'one'),
('2', 'two'),
('3', 'three');
दोनों दृष्टिकोणों से सावधान रहें क्योंकि आप एक ही अनुरोध के लिए अधिकतम पैकेट आकार से अधिक हो सकते हैं। आपको बैच आकार सेट करने की आवश्यकता हो सकती है जो आपके बफर में प्रविष्टियों की संख्या से अलग है। जैसे आपको 100 प्रविष्टियों में 1000 प्रविष्टियों को विभाजित करने की आवश्यकता हो सकती है।
स्रोत
2010-08-08 18:22:06
सावधानी के साथ इस दृष्टिकोण का उपयोग करें। मैंने सिस्टम को देखा है जो अतीत में ऐसा किया है और इंटरमीडिएट फ़ाइल बनाने और इसे सर्वर पर शिपिंग करने की लागत ने फास्ट फाइल लोड ऑपरेशन का उपयोग करने के प्रदर्शन लाभों को अधिक से अधिक किया है। –
यह बहुत खतरनाक लग रहा है क्योंकि हमारे पास दो ऐप सर्वर समान डाटाबेस तक पहुंच रहे हैं। मैं उस जवाब के बारे में वास्तव में डर गया था। आपके उत्तर के लिए धन्यवाद। –