मैंने स्टैक ओवरफ्लो डेटा डंप द्वारा प्रकाशित डेटा को थोक-लोड करने के लिए PHP स्क्रिप्ट लिखी है। मैं लाखों पंक्तियां आयात करता हूं और इसमें इतना समय नहीं लगता है।
यहां कुछ युक्तियां दी गई हैं:
-
स्वतः-प्रतिबद्धता पर भरोसा न करें। प्रत्येक पंक्ति के लिए लेनदेन शुरू करने और करने का ऊपरी भाग बहुत बड़ा है। स्पष्ट लेन-देन का उपयोग करें, और प्रत्येक 1000 पंक्तियों (या अधिक) के बाद प्रतिबद्ध हों।
-
तैयार किए गए कथनों का उपयोग करें। चूंकि आप मूल रूप से हजारों बार एक ही इन्सर्ट कर रहे हैं, आप लूपिंग शुरू करने से पहले प्रत्येक इंसर्ट तैयार कर सकते हैं, और फिर लूप के दौरान निष्पादित कर सकते हैं, मानों को पैरामीटर के रूप में पास कर सकते हैं। मुझे नहीं पता कि CodeIgniter की डेटाबेस लाइब्रेरी के साथ इसे कैसे करना है, आपको इसका पता लगाना होगा।
-
आयात के लिए MySQL को ट्यून करें। कैश बफ़र्स वगैरह बढ़ाएँ। देखें इन्सर्ट स्टेटमेंट की स्पीड अधिक जानकारी के लिए।
-
डेटा जानकारी लोड करें का उपयोग करें। अगर संभव हो तो। यह पंक्ति दर पंक्ति डेटा लोड करने के लिए INSERT का उपयोग करने से सचमुच 20x तेज है। मैं समझता हूं कि यदि आप ऐसा नहीं कर सकते हैं क्योंकि आपको अंतिम इंसर्ट आईडी वगैरह प्राप्त करने की आवश्यकता है। लेकिन ज्यादातर मामलों में, भले ही आप सीएसवी फ़ाइल पढ़ते हैं, इसे पुनर्व्यवस्थित करते हैं और इसे कई अस्थायी सीएसवी फाइलों में लिखते हैं, डेटा लोड अभी भी INSERT का उपयोग करने से तेज है।
-
इसे ऑफ़लाइन करें। वेब अनुरोध के दौरान लंबे समय से चल रहे कार्यों को न चलाएं। एक PHP अनुरोध की समय सीमा नौकरी समाप्त कर देगी, यदि आज नहीं तो अगले मंगलवार को जब नौकरी 10% लंबी होगी। इसके बजाय, वेब अनुरोध को कार्य को कतारबद्ध करें, और फिर उपयोगकर्ता को नियंत्रण वापस करें। आपको डेटा आयात को सर्वर प्रक्रिया के रूप में चलाना चाहिए, और समय-समय पर उपयोगकर्ता को प्रगति की दर को देखने की अनुमति देनी चाहिए। उदाहरण के लिए, ऐसा करने का एक सस्ता तरीका आपकी आयात स्क्रिप्ट के लिए आउटपुट "।" एक अस्थायी फ़ाइल में, और फिर उपयोगकर्ता अस्थायी फ़ाइल देखने और अपने ब्राउज़र में पुनः लोड करने का अनुरोध कर सकता है। अगर आप आकर्षक दिखना चाहते हैं, तो अजाक्स के साथ कुछ करें।