क्या InnoDB और MyISAM तालिकाओं को एक ही सर्वर पर मिलाना आम बात है?


21

मुझे 8GB RAM वाले सर्वर पर लगभग 4.5GB का एकल डेटाबेस मिला है। तालिकाओं के विशाल बहुमत MyIsam (लगभग 4.3GB) हैं, लेकिन मैं जल्द ही उनमें से कुछ को InnoDB में बदलने जा रहा हूं । (यह एक धीमी प्रक्रिया होने जा रही है, पहली बार में सबसे अधिक लेखन-गहन तालिकाओं पर ध्यान केंद्रित करते हुए)।

क्या एक समर्पित सर्वर चलाने में कुछ भी गलत है जहां दोनों प्रकार के भंडारण इंजन मौजूद हैं?


Is there anything wrong with running a dedicated server where both types of storage engines exist? शायद करने के लिए rephrase Multiple types?
जॉन

एकमात्र कारण मैंने 'दोनों' कहा क्योंकि यह प्रश्न उन दो मुख्य इंजनों के बारे में है जिन्हें 'बारीक से बारीक' करने के लिए कॉन्फ़िगर किया गया है। मैं MEMORY या MERGE जैसे अन्य प्रकार के इंजनों को अनदेखा करने की कोशिश कर रहा हूं, जो असामान्य रूप से पर्याप्त हैं जो afa प्रदर्शन ट्यूनिंग की वस्तु नहीं हैं।
डेरेक डाउनी

जवाबों:


18

जब तक आप प्रत्येक के पेशेवरों और विपक्ष को समझते हैं, तब तक एक ही भौतिक मशीन पर कई स्टोरेज इंजन का उपयोग करने में कुछ भी गलत नहीं है । सभी प्लगइन भंडारण प्रकारों के लिए प्रदर्शन विचार, सुविधा सीमाएं और उपयोग के मामले हैं।

उदाहरण के लिए, यदि आपके पास एक छोटी सी मेज है जो 90% लिखती है, तो आप MyISAM चुन सकते हैं। यदि डेटा को आसानी से पुनर्जीवित किया जा सकता है और यह एक छोटी सी तालिका है, तो पंक्तिबद्ध करने के लिए कहें, आप मेमोरी चुन सकते हैं। यदि आपके पास एक तालिका है जो 90% पढ़ती है, और डेटा तब मिलता है जब आप इसकी तलाश करते हैं, तो आप संभवतः एक भंडारण इंजन चुनेंगे जो लेनदेन का समर्थन करता है और इनोमबीडी जैसे कॉन्फ़िगर करने योग्य परमाणुता का समर्थन करता है। यदि आप फ़ाइल सिस्टम w / o हानिकारक डेटा के माध्यम से पहुंच चाहते हैं, तो आप CSV चुन सकते हैं।

फिर भी, आप एक ही स्कीमा के साथ-साथ भौतिक होस्ट के भीतर सुरक्षित रूप से कई स्टोरेज इंजन का उपयोग कर सकते हैं।

मुझे इस बात पर ध्यान देना चाहिए, कि आपके बफ़र्स इस पूरे गड़बड़ में भूमिका निभाते हैं। यदि आप MyISAM और InnoDB दोनों का उपयोग करते हैं, तो आपको सावधान रहना होगा कि आपके key_buffer और innodb_buffer_pool विरोध न करें। यह आपकी ओर से सावधानीपूर्वक योजना बनाएगा, लेकिन हम यही करते हैं।


4
+1 अन्य आम उपयोग का मामला पूर्ण पाठ खोज और अन्य सभी तालिकाओं के लिए InnoDB आवश्यक तालिकाओं के लिए MyISAM है।
आसफ



1
@randymelder अच्छा जवाब। क्या आप इसका विस्तार करने में सक्षम होंगे कि आपके द्वारा "आप का क्या मतलब है कि आपके key_buffer और innodb_buffer_pool को ध्यान नहीं रखना चाहिए"?
नील

1
मैं गलत साबित होना चाहता हूँ, लेकिन तर्क इस stackoverflow.com/a/6796566/5645769 के विपरीत दिखता है।
T

7

अगर यह एक आम बात है तो मैं आपको नहीं बता सकता। मैं अपने अनुभव के बारे में कह सकता हूं।

मैं हमेशा नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करता हूं, इसलिए मैं हर समय इंजनों का मिश्रण करता हूं। मेरी अधिकांश परियोजनाएँ डिफ़ॉल्ट इंजन के रूप में MyISAM का उपयोग करती हैं।

जब मुझे विशेष सुविधाएँ केवल InnoDB पर उपलब्ध होती हैं, तो मैं इसके लिए जाता हूँ।

जब एक टेबल ज्यादातर रीड-ओनली होती है, तो ब्लिंक करने से पहले मैं आर्काइव इंजन चुनता हूं।

यह जानकर कि मशीन सर्वर में पर्याप्त मेमोरी है, मेरे सभी अस्थायी डेटा हीप टेबल पर स्टोर हैं।

मैंने पिछले कुछ समय में MyISAM और InnoDB को मिलाकर कुछ मंदी देखी लेकिन यह एक विशिष्ट MySQL समस्या नहीं है। जब आप सिर्फ एक इंजन का उपयोग करते हैं तो यह एक डिजाइन समस्या नहीं लगती है। वास्तव में गलत इंजन का उपयोग करने से अधिक मंदी का कारण बनता है, इससे कोई फर्क नहीं पड़ता कि यह सिर्फ MyISAM है, बस InnoDB या दोनों का मिश्रण है। यह जानना कठिन है कि मंदी कब होगी। बस वास्तविक परीक्षण आपको यह कह सकते हैं।

बेशक, आप एक अद्वितीय क्वेरी पर इनोबीडी और माईसैम को मिलाकर अखंडता और स्थिरता को संरक्षित नहीं कर सकते।


संग्रह इंजन अनुक्रमण का समर्थन नहीं करता है इसलिए आप इसे संग्रह में संग्रहीत क्यों करते हैं।
user4951

0

मैं एक ही डेटाबेस में MyISAM और InnoDB टेबल को मिलाने से बचने की कोशिश करता हूं, लेकिन यह व्यावहारिक कारणों के बजाय विवेक के लिए है। हालाँकि, मुझे फुलटेक्स्ट सर्च के लिए MyISAM टेबल्स के साथ एक डेटाबेस रखना उपयोगी लगता है ताकि मैं इसे साइटों पर चला सकूं। प्रत्येक प्रविष्टि के लिए एक विदेशी कुंजी के साथ एक अलग डेटाबेस में रखने से डीबी पर काम करने वाले किसी भी अन्य डेवलपर्स के लिए यह देखना आसान हो जाता है कि क्या हो रहा है।


जब आप MyISAM का उपयोग करते हैं तो आपके पास एक विदेशी कुंजी कैसे हो सकती है?
a_horse_with_no_name

गलत शब्दावली, लेकिन एक विदेशी कुंजी की तरह काम करता है। मैं InnoDB तालिका से आइटम की आईडी संख्या संग्रहीत करता हूं और खोज परिणाम पर पृष्ठ देखने के लिए इसका उपयोग करता हूं।
केंजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.