हम माइस्क्लुएल से पीजीएसक्यूएल में माइग्रेट करने की प्रक्रिया में हैं और हमारे पास 100 मिलियन पंक्ति तालिका है।बीएसटी इंडेक्स बनाम माइस्क्लुएल बी + पेड़ बनाम
जब मैं यह पता लगाने की कोशिश कर रहा था कि दोनों सिस्टम कितनी जगह का उपयोग करते हैं, तो मुझे टेबल के लिए बहुत कम अंतर मिला, लेकिन इंडेक्स के लिए भारी अंतर मिला।
MySQL अनुक्रमणिका तालिका डेटा से अधिक आकार पर कब्जा कर रहे थे और पोस्टग्रेज़ काफी कम आकार का उपयोग कर रहे थे।
जब कारण के लिए के माध्यम से खुदाई, मैंने पाया कि MySQL बी + पेड़ का उपयोग करता है अनुक्रमित और postgres uses बी पेड़ स्टोर करने के लिए।
इंडेक्स का MySQL उपयोग थोड़ा अलग था, यह इंडेक्स के साथ डेटा संग्रहीत करता है (जिसके कारण बढ़ी हुई आकार), लेकिन पोस्टग्रेज़ नहीं है।
अब सवाल:
तुलना बी पेड़ और B + डेटाबेस पर पेड़ बात करते हैं, यह बी + पेड़ का उपयोग करने के बाद से वे सीमा के लिए बेहतर हैं बेहतर है प्रश्नों हे (एम) + O (लॉगएन) - जहां सीमा और लुक में एम बी + पेड़ों में लॉगरिदमिक है?
अब बी-पेड़ों में लुकअप रेंज क्वेरी के लिए लॉगरिदमिक है जो इसे ओ (एन) तक शूट करता है क्योंकि इसमें डेटा नोड्स के लिए लिंक की गई सूची अंतर्निहित संरचना नहीं है। इसके साथ ही, पोस्टग्रेस बी-पेड़ का उपयोग क्यों करता है? क्या यह रेंज पूछताछ के लिए अच्छा प्रदर्शन करता है (यह करता है, लेकिन यह बी-पेड़ों के साथ आंतरिक रूप से कैसे संभालता है)?
उपर्युक्त प्रश्न पोस्टग्रेस बिंदु से है, लेकिन एक MySQL परिप्रेक्ष्य से, यह पोस्टग्रेज़ से अधिक संग्रहण का उपयोग क्यों करता है, वास्तविकता में बी + पेड़ों का उपयोग करने का प्रदर्शन लाभ क्या है?
मैं कई चीजों को याद/गलत समझा सकता था, इसलिए कृपया मेरी समझ को सही करने के लिए स्वतंत्र महसूस करें।
का जवाब देने के लिए रिक जेम्स संपादित सवाल
- मैं MySQL
- के लिए InnoDB इंजन का उपयोग कर रहा मैं डेटा को आबाद करने के बाद सूचकांक बनाया - उसी तरह मैं postgres में किया था
- अनुक्रमित नहीं हैं अद्वितीय सूचकांक, केवल सामान्य अनुक्रमणिका
- कोई यादृच्छिक आवेषण नहीं था, मैंने दोनों पोस्टग्रेज़ और MySQL में सीएसवी लोडिंग का उपयोग किया और इसके बाद ही मैंने इंडेक्स बनाया।
- इंडेक्स और डेटा दोनों के लिए पोस्टग्रेस ब्लॉक आकार 8KB है, मुझे MySQL के लिए निश्चित नहीं है, लेकिन मैंने इसे नहीं बदला है, इसलिए यह डिफ़ॉल्ट होना चाहिए।
- मैं पंक्तियों को बड़ा नहीं कहूंगा, उनके पास 200 अक्षर लंबे, 4 दशमलव फ़ील्ड और 2 बिगिन फ़ील्ड के साथ लगभग 4 टेक्स्ट फ़ील्ड हैं - 1 9 नंबर लंबा।
- पीके 1 9 नंबरों के साथ एक बड़ा स्तंभ है, मुझे यकीन नहीं है कि यह भारी है या नहीं? भारी पैमाने पर गैर-भारी को किस पैमाने पर अलग किया जाना चाहिए?
- MySQL तालिका का आकार 600 एमबी था और पोस्टग्रेस इंडेक्स समेत लगभग 310 एमबी था - यह मेरा गणित सही होने पर 48% बड़ा आकार है। लेकिन क्या कोई तरीका है कि मैं माईएसक्यूएल में अकेले इंडेक्स आकार को माप सकता हूं टेबल आकार?इससे मुझे लगता है कि बेहतर संख्या का कारण बन सकता है।
- मशीन जानकारी: मेरे पास पर्याप्त तालिकाओं - 256GB सभी टेबल और इंडेक्स को फिट करने के लिए पर्याप्त था, लेकिन मुझे नहीं लगता कि हमें इस मार्ग को पार करने की आवश्यकता है, मुझे दोनों में कोई उल्लेखनीय प्रदर्शन अंतर नहीं दिखाई देता।
अतिरिक्त प्रश्न
- जब हम कहते हैं विखंडन होता है? क्या डी-विखंडन करने का कोई तरीका है ताकि हम कह सकें कि इससे परे कुछ भी नहीं किया जा रहा है। मैं रास्ते में सेंट ओएस का उपयोग कर रहा हूं।
- क्या MySQL में इंडेक्स आकार को मापने का कोई तरीका है, प्राथमिक कुंजी को क्लस्टर करने के रूप में अनदेखा कर रहा है, ताकि हम वास्तव में देख सकें कि कोई भी आकार किस प्रकार अधिक आकार पर कब्जा कर रहा है।
अक्सर मैं एक MySQL-vs-PostgreSQL प्रश्न नहीं देखता जो कि प्रासंगिक, विशिष्ट, और मुख्य रूप से राय का विषय नहीं है। मुझे खुद प्रतिक्रियाओं में दिलचस्पी है, हालांकि मुझे लगता है कि आपको * डीबीएमएस के अंदरूनी दोनों * में गहरी विशेषज्ञता खोजने में परेशानी होगी। –
संबंधित: [बी पेड़, बी + पेड़ अंतर] (http://stackoverflow.com/questions/870218/b-trees-b-trees- भिन्नता)। – klin
@ क्रेग्रिंजर: आइए उम्मीद करते हैं कि हमें जवाब मिलेंगे :) –