2011-07-03 21 views
8

कभी-कभी मुझे कुछ साक्षात्कारों पर पूछा गया: इनो डीबी के पास मायिसैम के खिलाफ क्या फायदे हैं और जब माईसाम इनो डीबी से बेहतर है? प्रश्न के पहले भाग के बारे में यह सब स्पष्ट है: इनो डीबी लेनदेन अनुपालन, टेबल-स्तरीय अवरोधन, विदेशी कुंजी समर्थन और कुछ अन्य लोगों के बजाय पंक्ति-स्तर अवरोधन है, इन बिंदुओं को तुरंत दिमाग में आ गया है।जब MyISAM InnoDB से बेहतर है?

लेकिन जब MyISAM InnoDB से वास्तव में बेहतर है?

उत्तर

13

माईसाम इनो डीबी से बेहतर है जब आपको उन उन्नत सुविधाओं की आवश्यकता नहीं है और स्टोरेज की गति अन्य चिंताओं की तुलना में अधिक महत्वपूर्ण है। माईसाम क्वेरी परिणामों की आवश्यकता के बजाय डेटाबेस इंजन के अंदर पूर्ण-पाठ खोजों को भी करने की अनुमति देता है और फिर उन्हें एक सरणी या आपके एप्लिकेशन में जो कुछ भी खोजता है उसे खोजता है।

यदि आप जटिल इंटरैक्शन और रिश्तों के साथ उच्च स्तर की निष्ठा के साथ डेटा स्टोर करने की आवश्यकता है तो इनो डीबी एक उचित विकल्प है। यदि आपको थोड़ी सी अवधि में बड़ी संख्या में रिकॉर्ड्स को सहेजने या लोड करने की आवश्यकता है तो माईसाम एक उचित विकल्प है।

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

यह भी उल्लेखनीय है कि InnoDB पंक्ति-स्तर लॉकिंग का समर्थन करता है, जबकि माईसाम केवल टेबल-स्तरीय लॉकिंग का समर्थन करता है - जो कहता है कि कई सामान्य स्थितियों के लिए, समानांतर में निष्पादित करने के लिए इनओडीबी नाटकीय रूप से तेज़ हो सकता है।

नीचे पंक्ति: इनो डीबी का उपयोग करें जब तक कि आपको पूरी तरह से MyISAM का उपयोग नहीं करना पड़े। वैकल्पिक रूप से, PostgreSQL के खिलाफ विकसित करें और दोनों का सर्वश्रेष्ठ प्राप्त करें।

+1

यह अभी भी निर्भर करता है। अगर आपको एसीआईडी ​​गारंटी की आवश्यकता है, तो ** MyIASM आपके लिए नहीं है **। भले ही आपको गति की आवश्यकता हो। –

+0

वास्तव में उस प्रभाव पर मेरी पोस्ट में संशोधन किया गया। जैसा कि मैंने संपादित पाठ में बताया है, मैं वास्तव में कुछ भी महत्वपूर्ण में MySQL के उपयोग का सामना नहीं कर सकता। –

+0

आइए इस पार्टी को https://lxadm.com/MySQL:_Converting_all_tables_in_all_databases_from_MyISAM_to_InnoDB – Luka

4

माईसाम लेनदेन (और अन्य चीजों का उल्लेख) का समर्थन नहीं करता है, इसलिए यह तेजी से काम कर सकता है। MyISAM उन स्थितियों में उच्च प्रदर्शन प्राप्त करने का एक तरीका है जब आपको इन सुविधाओं की आवश्यकता नहीं होती है।

+1

"ये सुविधाएं" आरडीबीएमएस को आरडीबीएमएस बनाने वाली हर चीज है: [एसीआईडी] (http://en.wikipedia.org/wiki/Acid) (यह एक हाइपरबोले का थोड़ा सा है, लेकिन फिर भी ...) –

+2

विश्वास मैं, जब आपको उस अतिरिक्त प्रदर्शन की आवश्यकता होती है, तो आरडीबीएमएस-एस की उन विशेषताओं को छोड़ना अक्सर जाने का तरीका होता है। मौजूदा लोकप्रिय नोएसक्यूएल समाधानों की जांच करें और एसीआईडी ​​की आवश्यकता के बारे में आप जो कुछ भी करते हैं उसे देखें। –

+0

यहां मुद्दा यह है कि MySQL उन तरीकों से उन्हें छोड़ देता है जो उस काम को करने की क्षमता को नुकसान पहुंचाते हैं जिसका विज्ञापन करने के लिए किया जाता है। MyISAM गूढ़ या अज्ञात कारणों के लिए डेटा खाने के लिए कुख्यात है, और लोकप्रिय नोएसक्यूएल समाधान कार्यक्षमता की हत्या किए बिना संबंधपरक तर्क को छोड़ने के लिए प्रबंधन कर रहे हैं। –

2

कुछ विशेषताएं हैं जो MySQL केवल MyISAM (जैसे मूल पूर्ण टेक्स्ट अनुक्रमण) के लिए लागू की गई हैं।

यह कहा गया है कि, अधिकांश उत्पादन ऐप्स के लिए इनो डीबी अभी भी आम तौर पर बेहतर है।

+1

यह एक वैध परिदृश्य भी है, हालांकि बाहरी मामलों में एक बाहरी खोज इंजन (ल्यूसीन, स्फिंक्स) शायद इन मामलों में उपयोग करने के लिए एक बेहतर समाधान है –

1

इसके अलावा: mySQL में पूर्ण-पाठ खोज केवल myISAM तालिकाओं में समर्थित है।

3

माईसाम जैसा कि उल्लेख किया गया है, पूर्ण पाठ का समर्थन करता है, लेकिन मेर्ज टेबल प्रकार का भी समर्थन करता है। यह आसान है जब आपके पास एक बड़ी मेज है और समय-समय पर इसके हिस्सों को "स्वैप" करना/संग्रह करना चाहते हैं। लॉगिंग या रिपोर्ट डेटा के बारे में सोचें जिसे आप पिछली तिमाही और/या वर्ष रखना चाहते हैं। MyISAM इस तरह की बड़ी मात्रा में डेटा को बेहतर तरीके से संभालता है, जब आप मुख्य रूप से डालने और शायद ही कभी अपडेट या हटाना चाहते हैं।

एक बार जब आप स्मृति में इंडेक्स फिट नहीं कर सकते हैं तो InnoDB प्रदर्शन बहुत तेज़ी से और नाटकीय रूप से गिर जाता है। यदि आपकी प्राथमिक कुंजी एक संख्या (यानी ऑटो वृद्धि) नहीं होने वाली है, तो आप InnoDB का उपयोग करके पुनर्विचार करना चाह सकते हैं। प्राथमिक कुंजी को प्रत्येक इंडेक्स के लिए एक InnoDB तालिका पर दोहराया जाता है। तो यदि आपके पास बड़ी प्राथमिक कुंजी और कुछ अन्य अनुक्रमणिका हैं, तो आपकी इनो डीबी तालिका बहुत बड़ी हो जाएगी।

+1

टूटा हुआ, फैनबॉय रिकॉर्ड की तरह लगने का खतरा - यही कारण है कि जब भी मैं कॉलग्रेक्यूएल के खिलाफ कॉल करता हूं तो मैं इसे कॉल करता हूं। टेबल विभाजन का कार्यान्वयन भयानक है। –

0

आईओएसडीबी की तुलना में मायिसैम की एक बहुत ही सरल संरचना है। कोई पंक्ति संस्करण नहीं है, प्रति तालिका एक फ़ाइल है और पंक्तियों को अनुक्रमिक रूप से संग्रहीत किया जाता है।हालांकि, यह समवर्ती आवेषणों का समर्थन करता है (SELECTs और 1 INSERT एक साथ चल सकता है), इसमें टेबल-स्तरीय ताले भी हैं (यदि एक ही टेबल पर 2 INSERT हैं, तो 1 प्रतीक्षा करनी है)। साथ ही, डेटा फ़ाइलों की संरचना के कारण अद्यतन और DELETEs धीमी हैं।

माईसाम लेनदेन या विदेशी कुंजी का समर्थन नहीं करता है।

आम तौर पर, MyISAM बेहतर अगर आप सामान्य प्रवृत्तियों पर काम किया जाना चाहिए (ताकि आप अलग-अलग पंक्तियों की सत्यता के बारे में परवाह नहीं है) और डेटा या कभी रात को अद्यतन किया जाता है। साथ ही, यह फाइल सिस्टम के माध्यम से, एक सर्वर से दूसरे सर्वर पर अलग-अलग तालिकाओं को स्थानांतरित करने की अनुमति देता है।

इनो डीबी बहुत अच्छी सहमति और लेनदेन का समर्थन करता है। पूर्ण पाठ के लिए एक सभ्य समर्थन है और विदेशी कुंजी के लिए लगभग सभ्य समर्थन है।

संबंधित मुद्दे