किसी OLTP सिस्टम में कुंजियों और समूहों के रूप में GUID के साथ कुछ भी गलत नहीं है (जब तक कि आपके पास तालिका का अनुक्रमणिका बहुत है जो क्लस्टर के बढ़े हुए आकार से पीड़ित हैं)। तथ्य की बात के रूप में, वे पहचान क्षमता स्तंभों की तुलना में अधिक मापनीय हैं।
व्यापक धारणा है कि SQL सर्वर में GUID एक बड़ी समस्या है - बड़े पैमाने पर, यह काफी सरल रूप से गलत है। तथ्य की बात के रूप में, GUID बॉक्स पर लगभग 8 से अधिक कोर के साथ काफी अधिक स्केलेबल हो सकता है:
मुझे खेद है, लेकिन आपके डेवलपर्स सही हैं। GUID के बारे में चिंता करने से पहले अन्य चीजों के बारे में चिंता करें।
ओह, और अंत में: आप पहले स्थान पर क्लस्टर इंडेक्स क्यों चाहते हैं? यदि आपकी चिंता बहुत छोटे सूचकांक के साथ एक ओएलटीपी प्रणाली है, तो आप एक ढेर के साथ बेहतर होने की संभावना है।
आइए अब विचार करें कि आपके रीड को कौन सा विखंडन (जो GUID पेश करेगा) करता है। विखंडन के साथ तीन प्रमुख समस्याएं हैं:
- पृष्ठ विभाजन लागत डिस्क I / O है
- आधे पूर्ण पृष्ठ पूर्ण पृष्ठों के समान स्मृति कुशल नहीं हैं
- यह पृष्ठों को क्रम से संग्रहीत करने का कारण बनता है, जो क्रमिक I / O कम संभावना बनाता है
चूँकि प्रश्न में आपकी चिंता स्केलेबिलिटी के बारे में है, जिसे हम "अधिक हार्डवेयर जोड़ने से सिस्टम को और तेज़ बनाते हैं" के रूप में परिभाषित कर सकते हैं, ये आपकी समस्याओं में से सबसे कम हैं। बारी-बारी से हर एक को संबोधित करने के लिए
विज्ञापन 1) यदि आप स्केल चाहते हैं, तो आप I / O खरीद सकते हैं। यहां तक कि एक सस्ता सैमसंग / इंटेल 512 जीबी एसएसडी (कुछ अमरीकी डालर / जीबी पर) आपको 100K IOPS से अधिक मिलेगा। आप किसी भी समय 2 सॉकेट सिस्टम पर जल्द ही उपभोग नहीं करेंगे। और अगर आपको इसमें भाग लेना चाहिए, तो एक खरीद लें और आप सेट हो जाएं
विज्ञापन 2) यदि आप अपनी तालिका में हटाते हैं, तो आपके पास वैसे भी पूरे आधे पृष्ठ होंगे। और यहां तक कि अगर तुम नहीं, स्मृति सस्ते और सभी के लिए है, लेकिन सबसे बड़ा OLTP सिस्टम - गर्म डेटा वहाँ फिट होना चाहिए। जब आप पैमाने की तलाश कर रहे हों, तो अधिक डेटा को पृष्ठों में पैक करना उप-अनुकूलन है।
विज्ञापन 3) बार-बार पृष्ठ विभाजन से बनी एक तालिका, अत्यधिक खंडित डेटा यादृच्छिक I / O को ठीक उसी गति से करता है जो क्रमिक रूप से भरी गई तालिका करती है
जुड़ने के संबंध में, दो प्रमुख जॉइन प्रकार हैं जिन्हें आप ओएलटीपी में देख सकते हैं जैसे कार्यभार: हैश और लूप। प्रत्येक को बारी-बारी से देखें:
हैश ज्वाइन करें: एक हैश ज्वाइन करता है कि छोटी टेबल स्कैन की जाती है और बड़ी को आमतौर पर खोजा जाता है। छोटे तालिकाओं की स्मृति में होने की बहुत संभावना है, इसलिए I / O यहां आपकी चिंता नहीं है। हमने पहले से ही इस तथ्य को छुआ था कि खंडित सूचकांक में समान लागत होती है जैसे कि एक गैर खंडित सूचकांक में
लूप जॉइन करें: बाहरी टेबल की तलाश की जाएगी। एक ही लागत
आपके पास बहुत सी खराब टेबल स्कैनिंग हो सकती है - लेकिन फिर GUID फिर से आपकी चिंता नहीं है, उचित अनुक्रमण है।
अब, आपके पास कुछ वैध रेंज स्कैन हो सकते हैं (विशेषकर विदेशी कुंजियों में शामिल होने पर) और इस मामले में, खंडित डेटा गैर-खंडित डेटा की तुलना में कम "पैक" होता है। लेकिन आइए इस पर विचार करें कि 3NF डेटा को अच्छी तरह अनुक्रमित करने के लिए आपको किन चीज़ों को देखने की संभावना होगी:
उस तालिका से जुड़ना, जिसमें उस संदर्भ की तालिका की प्राथमिक कुंजी के लिए एक विदेशी कुंजी संदर्भ है
दूसरी तरह के आसपास
विज्ञापन 1) इस मामले में, आप प्राथमिक कुंजी के लिए एक एकल की तलाश में जा रहे हैं - n में शामिल होने के लिए 1. विखंडन या नहीं, एक ही लागत (एक तलाश)
विज्ञापन 2) इस मामले में, आप एक ही कुंजी में शामिल हो रहे हैं, लेकिन एक से अधिक पंक्ति (रेंज सीक) प्राप्त कर सकते हैं। इस मामले में शामिल 1 से n है। हालाँकि, आप जिस विदेशी तालिका की तलाश कर रहे हैं, आप एसएएमई कुंजी की मांग कर रहे हैं, जो कि खंडित सूचकांक में उसी पृष्ठ पर होने की संभावना है, जो एक खंडित सूचकांक पर है।
एक पल के लिए उन विदेशी कुंजियों पर विचार करें। यहां तक कि अगर आपके पास "पूरी तरह से" अनुक्रमिक हमारी प्राथमिक चाबियाँ रखी गईं - तो उस कुंजी की ओर इशारा करते हुए कुछ भी अभी भी गैर अनुक्रमिक होगा।
बेशक, आप कुछ बैंक में सैन में एक वर्चुअल मशीन पर चल रहे हो सकते हैं जो पैसे पर सस्ता और प्रक्रिया पर उच्च है। फिर यह सब सलाह खो जाएगी। लेकिन अगर वह आपकी दुनिया है, तो मापनीयता वह नहीं है जो आप ढूंढ रहे हैं - आप प्रदर्शन और उच्च गति / लागत की तलाश कर रहे हैं - जो दोनों अलग-अलग चीजें हैं।