आप एक MySQL डेटाबेस इंजन का चयन कैसे करते हैं


16

विशेष रूप से, आप MyISAM और InnoDB के बीच कैसे चयन करते हैं, जब न तो एक आवश्यक सुविधा याद आती है (जैसे आपको विदेशी कुंजी की आवश्यकता नहीं है)।

क्या यह हमेशा दोनों की कोशिश करने और मापने के लिए नीचे आता है? या पढ़ने बनाम लिखने की संख्या और आवृत्ति और इस तरह के अन्य उपायों के बारे में अंगूठे के अच्छे नियम हैं? क्या टेबल का आकार विशिष्ट पसंद पर कोई प्रभाव डालता है?

जवाबों:


6

जवाब है कि आपको हमेशा माप करना चाहिए, अधिमानतः अपने स्वयं के डेटा और कार्यभार के साथ यदि संभव हो तो।

चूंकि डेटा एक्सेस पैटर्न ऐप से ऐप में बहुत भिन्न हो सकते हैं, इसलिए यह कहना मुश्किल है और सभी कार्यभार के लिए "सर्वश्रेष्ठ" भंडारण इंजन का निर्धारण करना असंभव है।

हालाँकि, MySQL स्पेस में बहुत उत्साहजनक घटनाक्रम हैं, जिसमें पिछले हफ्ते MySQLConf / Percona Performance Conf।

वैकल्पिक भंडारण इंजनों में से कुछ:

  1. XtraDB (InnoDB का कांटा)
  2. InnoDB प्लगइन
  3. PBXT
  4. TokuDB

इसके अतिरिक्त, पेरकोना, Google, आदि ने पैच का योगदान दिया है जो इनोबीडी प्रदर्शन के साथ बहुत मदद करते हैं। व्यक्तिगत रूप से, मैं एक OurDelta बिल्ड चलाते हैं। यह मेरे लिए अच्छी तरह से काम करता है और मैं OurDelta और Percona बिल्ड की जाँच करने के लिए प्रोत्साहित करता हूँ।


यदि आप बेंचमार्क में रुचि रखते हैं, तो sysbench या iibench आज़माएँ।
Jauder Ho

क्या वैकल्पिक भंडारण इंजनों में से कोई भी इतना स्थिर है कि वे उत्पादन स्थल के लिए उपयुक्त हों?
टोनी मेयर

डॉन MacAskill XtraDB को उत्पादन में डाल रहा है। YMMV।
Jauder हो

प्रदर्शन केवल आवश्यकता नहीं है - परिचालन मुद्दों पर भी विचार करें (वास्तव में वे आमतौर पर अधिक महत्वपूर्ण हैं, मेरे अनुभव में)
9'26

जाहिर है, प्रदर्शन केवल आवश्यकता नहीं है, हालांकि मेरा मानना ​​है कि मूल अनुरोध पूर्ण के बारे में अधिक पूछ रहा था। अन्य विचार जैसे परिचालन (जैसा कि आप बताते हैं) और सुविधाएँ सभी चयन प्रक्रिया में एक भूमिका निभाएंगे।
जौडर हो

5

यदि यह सिर्फ एक साधारण स्टोर / रिपोर्ट सिस्टम है तो मैं इसके कच्चे प्रदर्शन के लिए MyISAM का उपयोग करता हूं।

यदि मैं पंक्ति-स्तर लॉकिंग का लाभ उठाने के लिए कई समवर्ती अभिगमों के बारे में चिंतित था, तो मैं InnoDB का उपयोग करूंगा।


1
किसी भी कार्यभार के लिए, जो मिश्रण को पढ़ता है और लिखता है, InnoDB एकमात्र विकल्प है (जो वर्तमान में शिपिंग है)।
डेव चेनी

4

अलग-अलग MySQL डेटाबेस इंजन के लिए अच्छी संख्या में बेंचमार्क हैं। Percona MySQL Performance Blog पर MyISAM, InnoDB और Falcon की तुलना करने वाला एक सभ्य है , यहां देखें ।

दो पूर्वोक्त इंजनों (MyISAM और InnoDB) के बीच विचार करने के लिए एक और चीज लॉकिंग के लिए उनके दृष्टिकोण हैं। MyISAM टेबल-लॉकिंग करता है, जबकि InnoDB रो-लॉकिंग करता है। न केवल प्रदर्शन के आंकड़ों पर विचार करने के लिए विभिन्न प्रकार की चीजें हैं।


4

ऐसी विशेषताएं हैं जो आपको परिचालन कारणों से बहुत उपयोगी लगेंगी, भले ही आपके एप्लिकेशन को उनकी बिल्कुल आवश्यकता न हो:

  • InnoDB में MVCC है जिसका अर्थ है कि आप गैर-अवरुद्ध सुसंगत बैकअप ले सकते हैं
  • InnoDB में स्वचालित पुनर्प्राप्ति है जिसका अर्थ है अशुद्ध शटडाउन के बाद कोई लंबा मरम्मत कार्य नहीं
  • InnoDB के साथ, पाठक कभी भी लेखकों को ब्लॉक नहीं करते हैं और इसके विपरीत, (आमतौर पर बोलने वाले) अधिक संगामिति का अर्थ है (हालांकि इसका सामान्य मामले में बेहतर प्रदर्शन का मतलब नहीं है)
  • InnoDB प्राथमिक कुंजी पर अपनी पंक्तियों को क्लस्टर करता है, जिसका अर्थ है पढ़ने के संचालन के लिए कम IO संचालन यदि प्राथमिक कुंजी को अच्छी तरह से चुना गया था।

विदेशी कुंजी बाधाओं के बावजूद, आप शायद वैसे भी InnoDB का उपयोग करना चाहते हैं।

बेशक यह सर्वरफॉल्ट है, स्टैक ओवरफ्लो नहीं, इसलिए उचित उत्तर है:

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

2
क्या आप वास्तव में सोचते हैं कि डेटाबेस इंजन डेवलपर का निर्णय है, प्रशासकों का नहीं? एक डेवलपर के रूप में, मैं यह कहना चाहता हूं कि "मेरे पास यह डेटा है, कि मैं इसके साथ ऐसा करूंगा", और व्यवस्थापक को डेटाबेस का अनुकूलन (और बैकिंग, और ...) छोड़ दें।
टोनी मेयर

1
हां, डेवलपर को एक विशिष्ट इंजन के खिलाफ अपने ऐप को विकसित और परीक्षण करने में सक्षम होना चाहिए; वे कार्यात्मक और प्रदर्शन दोनों में अलग-अलग व्यवहार करते हैं।
'21:

2

मेरे होस्टिंग प्रदाता ने हमें MyISAM से पूरी तरह से छुटकारा पाने और InnoDB पर स्विच करने की सलाह दी, जब तक कि यह संभव न हो।

हमारे मामले में हम गंभीर डेटा भ्रष्टाचार कर रहे थे, जो प्रति दिन कुछ समय से कुछ समय के लिए दिखाना शुरू कर दिया था, हमेशा REPAIR टेबल और संबंधित आदेशों की आवश्यकता होती थी, जो बड़े तालिकाओं पर युगों तक ले जाते थे।

एक बार जब हम InnoDB में परिवर्तित (या: परिवर्तित) हो गए, तो समस्याएं तुरंत चली गईं। डाउनसाइड्स / कैविट्स हमारे पास थे:

  • FULLTEXT इंडेक्स के साथ तालिकाओं को परिवर्तित नहीं किया जा सकता है (यह समस्या समय के साथ अपने आप चली गई; इसे सोलर / ल्यूसीन आधारित समाधान से बदल दिया गया, जिसकी वैसे भी बेहतर गुणवत्ता है)
  • लाखों पंक्तियों वाली बड़ी तालिकाओं को जिन्हें अक्सर COUNT (*) की आवश्यकता होती है , बहुत धीमी थी, हम उन दोनों को स्विच करने में सक्षम नहीं थे।

लेकिन ध्यान दें: यह हमारे पर्यावरण आदि के लिए विशिष्ट है, इसलिए यह आम तौर पर लागू नहीं हो सकता है।


केवल MyISAM में तालिका से चुनिंदा गणना ( ) तेज है। तालिका से स्तंभ ( मान) का चयन करें जहां कॉलम = मान का MyISAM और InnoDB दोनों पर समान प्रदर्शन होता है। mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables
sumar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.