लेख निर्देशिका
डाटाबेस तालिकाको भण्डारण इन्जिन कारको इन्जिन जस्तै हो; इन्जिन परिवर्तन गर्दा तुरुन्तै कार्यसम्पादन र विशेषताहरू परिवर्तन हुन्छन्। धेरै मानिसहरू सोच्छन् कि डाटाबेस केवल डाटा भण्डारणको लागि हो, तर जब तपाईं वास्तवमा यसमा काम गर्न थाल्नुहुन्छ... InnoDB 转成 MyISAMत्यसपछि मात्र तपाईंले यसको पछाडि लुकेका रहस्यहरू पत्ता लगाउनुहुनेछ।
किन कोही InnoDB बाट MyISAM मा स्विच गर्न चाहन्छ?
धेरै परिदृश्यहरूमा, MyISAM छिटो हुन्छ, विशेष गरी लग र तथ्याङ्क डाटाबेस जस्ता पढ्ने-भारी र लेख्ने-हल्का अनुप्रयोगहरूको लागि।
यसको टेबल-लेभल लकिङ मेकानिजम वास्तवमा कम कन्करन्सीमा धेरै सहज रूपमा चल्छ।
यसबाहेक, MyISAM को फाइल भण्डारण बढी सहज छ; एउटा .MYD डेटा भण्डारण गर्नुहोस्, एउटा .MYI अनुक्रमणिकाहरू भण्डारण गर्ने, माइग्रेट गर्ने र ब्याकअप गर्ने सबै धेरै सुविधाजनक छन्।
यद्यपि, जटिल व्यावसायिक परिदृश्यहरूमा InnoDB को लेनदेन र विदेशी कुञ्जी समर्थन लगभग आवश्यक छ।
त्यसकारण, संक्रमण गर्नु अघि तपाईंले आफ्नो व्यवसायलाई वास्तवमा यी सुविधाहरूको आवश्यकता छ कि छैन भनेर पत्ता लगाउनु पर्छ।
मुख्य आदेश: तालिका परिवर्तन गर्नुहोस्
InnoDB बाट MyISAM मा एउटा तालिका रूपान्तरण गर्न, तपाईंलाई कोडको एउटा मात्र लाइन चाहिन्छ:
ALTER TABLE `你的表名` ENGINE = MyISAM;
कार्यान्वयन पूरा भएपछि, तालिकाको भण्डारण इन्जिन स्विच गरिनेछ।
के त्यो सीधा छैन र?
ब्याच रूपान्तरण: स्वचालित स्क्रिप्ट उत्पादन
यदि तपाईंसँग दर्जनौं वा सयौं तालिकाहरू छन् भने, तिनीहरूलाई म्यानुअल रूपमा परिमार्जन गर्नु निश्चित रूपमा व्यावहारिक छैन।
यस बिन्दुमा, ब्याच रूपान्तरण कथनहरू स्वचालित रूपमा उत्पन्न गर्न एकल क्वेरी प्रयोग गर्न सकिन्छ:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
चलाएपछि, यसले धेरै... आउटपुट गर्नेछ। ALTER TABLE ... कथन।
यी कथनहरू प्रतिलिपि गर्नुहोस् र एकै पटकमा ब्याच रूपान्तरण पूरा गर्न ती सबैलाई एकैचोटि कार्यान्वयन गर्नुहोस्।
यसलाई "स्वचालित ब्याच रूपान्तरण" भनेर चिनिन्छ।
रूपान्तरण अघि जोखिम मूल्याङ्कन

विदेशी प्रमुख अवरोधहरू
InnoDB ले विदेशी कुञ्जीहरूलाई समर्थन गर्दछ, जबकि MyISAM ले तिनीहरूलाई बिल्कुल समर्थन गर्दैन।
एक पटक रूपान्तरण भएपछि, विदेशी कुञ्जी अवरोधहरू सिधै खारेज गरिनेछ।
यदि तपाईंको व्यवसाय क्यास्केडिङ डिलिट वा अपडेटहरूमा निर्भर छ भने, रूपान्तरण पछि तर्क पूर्ण रूपमा असफल हुनेछ।
लेनदेन समर्थन
InnoDB सँग लेनदेनहरू छन् र तिनीहरूलाई समर्थन गर्दछ। COMMIT 和 ROLLBACK।
MyISAM मा लेनदेन हुँदैन, केवल टेबल-लेभल लकहरू हुन्छन्।
रूपान्तरण पछि, सबै लेनदेन-सम्बन्धित कोड अमान्य हुनेछन्, र अपवादको अवस्थामा रोलब्याक असम्भव हुनेछ।
समवर्ती प्रदर्शन
InnoDB ले रो-लेभल लकिङ प्रयोग गर्छ, जबकि MyISAM ले टेबल-लेभल लकिङ प्रयोग गर्छ।
उच्च-सहमति परिदृश्यहरूमा, MyISAM ले बारम्बार तालिकाहरू लक गर्छ, जसले गर्दा कार्यसम्पादनमा अवरोधहरू आउँछन्।
अनुक्रमणिका सुविधाहरू
在 MySQL संस्करण ५.६ भन्दा पहिले, MyISAM को आफ्नै पूर्ण-पाठ अनुक्रमणिका थियो।
तर MySQL पूर्ण-पाठ अनुक्रमणिका पहिले नै MariaDB र InnoDB को संस्करण ५.६ र १०+ मा समर्थित छ।
त्यसकारण, जबसम्म तपाईंले पुरानो संस्करण प्रयोग गरिरहनुभएको छैन, पूर्ण-पाठ अनुक्रमणिकाको लागि MyISAM मा स्विच गर्न आवश्यक छैन।
उत्तम अभ्यास प्रक्रिया
डेटा ब्याकअप गर्नुहोस् रूपान्तरण गर्नु अघि, निर्यात गर्न निश्चित गर्नुहोस्।
.sqlफाइलहरू जुनसुकै बेला पुनर्स्थापित गर्न सकिन्छ भनेर भण्डारण गरिन्छ।चेकलिस्ट संरचना विदेशी कुञ्जी अवस्थित छ कि छैन भनेर जाँच गर्न निम्न आदेश प्रयोग गर्नुहोस्:
SHOW CREATE TABLE `你的表名`;रूपान्तरण गर्नुहोस् 使用
ALTER TABLEवैकल्पिक रूपमा, रूपान्तरण पूरा गर्न ब्याच स्क्रिप्टहरू प्रयोग गर्न सकिन्छ।स्वास्थ्य स्थिति जाँच गर्नुहोस् रूपान्तरण पूरा भएपछि, चलाउनुहोस्:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;यसले तालिका सही तरिकाले काम गरिरहेको छ भनी पुष्टि गर्छ र टुक्राहरू छोड्छ।
उल्टो रिकभरी विधि
रूपान्तरण पछि कार्यसम्पादनमा गिरावट वा व्यावसायिक तर्क सम्बन्धी समस्याहरू देखिएमा, तपाईं कुनै पनि समयमा InnoDB मा फर्कन सक्नुहुन्छ:
ALTER TABLE `你的表名` ENGINE = InnoDB;
यसलाई "उल्ट्याउन मिल्ने अपरेशन" भनिन्छ, जसले तपाईंलाई बाहिर निस्कने बाटो दिन्छ।
आधिकारिक दृष्टिकोण उद्धृत गरियो
अनुसार MySQL आधिकारिक कागजात स्पष्टीकरण:
"विदेशी कुञ्जी निर्माण"aints केवल InnoDB द्वारा समर्थित छन्। यदि तपाईंले तालिकालाई MyISAM मा रूपान्तरण गर्नुभयो भने, सबै विदेशी कुञ्जीहरूलाई बेवास्ता गरिनेछ।"
——MySQL सन्दर्भ पुस्तिका, अध्याय १४.६.६ विदेशी कुञ्जी अवरोधहरू
यो कथनले हामीलाई स्पष्ट रूपमा बताउँछ कि MyISAM मा विदेशी कुञ्जीहरू पूर्ण रूपमा अमान्य छन्।
र मारियाडीबी आधिकारिक कागजात यो पनि जोड दिइएको थियो कि:
"MyISAM ले लेनदेनलाई समर्थन गर्दैन। लेनदेनको अखण्डतामा भर पर्ने अनुप्रयोगहरूले MyISAM प्रयोग गर्नु हुँदैन।"
——MariaDB ज्ञान आधार, भण्डारण इन्जिनहरू
त्यसैले तपाईंले परिवर्तन गर्नु अघि दुई पटक सोच्नुपर्छ।
मेरो दृष्टिकोण र निष्कर्ष
InnoDB लाई MyISAM मा रूपान्तरण गर्नु भनेको लक्जरी कारको इन्जिनलाई ट्रक इन्जिनले प्रतिस्थापन गर्नु जस्तै हो।
यो चल्न सक्छ, तर यो पूर्णतया फरक तरिकाले चल्छ।
यदि तपाईंको व्यवसायमा हल्का तथ्याङ्कीय प्रश्नहरू समावेश छन् भने, MyISAM को गति र सरलता बढी उपयुक्त हुन सक्छ।
यद्यपि, यदि तपाईंको प्रणाली लेनदेन र विदेशी कुञ्जीहरूमा निर्भर छ भने, हतारमा तिनीहरूलाई रूपान्तरण गर्नु एयरब्याग हटाउनु जस्तै हो।
त्यसकारण, साँचो बुद्धि आँखा चिम्लेर गतिको पछि लाग्नुमा होइन, तर स्थिरता र कार्यसम्पादनलाई सन्तुलनमा राख्नुमा निहित छ।
डाटाबेसको छनोटले प्रणालीको आत्मा निर्धारण गर्छ।
भण्डारण इन्जिनहरू स्विच गर्ने सीपमा निपुण हुनु प्राविधिक क्षमताको प्रदर्शन मात्र होइन, वास्तुकलाको सोचको उचाइ पनि हो।
यदि तपाईं थोक रूपान्तरण गर्ने विचार गर्दै हुनुहुन्छ भने, कृपया पहिले एक व्यापक जोखिम मूल्याङ्कन गर्नुहोस्।
वास्तविक व्यापार परिदृश्यहरूको नक्कल गर्न एक पटक परीक्षण वातावरण चलाउनुहोस्।
सबै कुरा सही छ भनी पुष्टि गरेपछि, उत्पादन वातावरणमा यसलाई कार्यान्वयन गर्नुहोस्।
डाटाबेसहरू खेलौना होइनन्; तिनीहरू उद्यम डेटाको मुटु हुन्।
अनि तपाईं नै हुनुहुन्छ जसले आफ्नो मुटुको लय नियन्त्रण गर्नुहुन्छ।
आशा चेन वेइलियाङ ब्लग ( https://www.chenweiliang.com/ यहाँ साझा गरिएको "MySQL/MariaDB डाटाबेसमा InnoDB तालिकाहरूलाई MyISAM तालिकाहरूमा कसरी ब्याच रूपान्तरण गर्ने?" लेख तपाईंको लागि उपयोगी हुन सक्छ।
यस लेखको लिङ्क साझा गर्न स्वागत छ:https://www.chenweiliang.com/cwl-34157.html
