5

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

(नोट:।। मैं पेशेवरों और एक UniqueIdentifier एक प्राथमिक कुंजी या क्लस्टर सूचकांक के रूप में उपयोग करने का विपक्ष पर चर्चा नहीं करना चाहते हैं उस के बारे में वेब पर जानकारी का एक टन है यह नहीं कि चर्चा है।

मैं क्लस्टर सूचकांक और प्राथमिक कुंजी के रूप में एक UniqueIdentifier के साथ एक मेज है कहते हैं:)

तो यहाँ परिदृश्य है कि मुझे चिंतित है। चलिए इसे कोला कहते हैं। मैंने कोला के लिए डिफ़ॉल्ट मान को NewSequentialId() सेट किया है।

का उपयोग करना है कि NewSequentialId() मैं तीन अनुक्रमिक पंक्तियां सम्मिलित:

{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3- 440D-A9FE-CC7988DDF067}

फिर मैं अपने सर्वर को रीबूट करता हूं। docs for NewSequentialId कहता है कि "विंडोज को पुनरारंभ करने के बाद, GUID एक निम्न सीमा से फिर से शुरू हो सकता है, लेकिन अभी भी वैश्विक स्तर पर अद्वितीय है।"

तो अगला प्रारंभिक बिंदु पिछले सीमा से कम हो सकता है।

{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-:

तो पुनः आरंभ करने के बाद, मुझे 3 अधिक मान सम्मिलित 4645-ABA9-B098D2003E66}

(मुझे यकीन नहीं है कि डेटाबेस में ग्रिड का प्रतिनिधित्व कैसे किया जाता है, लेकिन मान लें कि यह 3 से शुरू होता है और पिछले 7 के साथ शुरू होता है कि 3 लोग "छोटे" होते हैं 7 वाले।)

जब आप एक सम्मिलित करते हैं क्लस्टर्ड इंडेक्स के बीच में, इंडेक्स का रीमेपिंग होना होता है। (कम से कम मेरे डीबीए ने मुझे बताया है।) और हर बार जब मैं रीबूट करता हूं तो मैं अपनी नई अनन्य इंडेंटिफायर रेंज को अन्य पिछली श्रेणियों के बीच में सही होने का जोखिम चलाता हूं।

तो मेरा सवाल यह है: चूंकि अनन्य इंडेंटिफायर का अगला सेट अंतिम सेट से छोटा होगा, क्या प्रत्येक डालने से मेरा क्लस्टर इंडेक्स शफल हो जाएगा?

और यदि नहीं, तो क्यों? क्या SQL सर्वर जानता है कि मैं NewSequentialId का उपयोग कर रहा हूं? क्या कुछ इसके लिए कितना क्षतिपूर्ति करता है?

यदि नहीं, तो यह कैसे पता चलेगा कि मैं आगे क्या सम्मिलित करूंगा? शायद अगले मिलियन आवेषण 3 से शुरू होंगे। या शायद वे 7 से शुरू होंगे। यह कैसे पता चलता है?

या यह नहीं जानता है और बस सबकुछ क्रम में रखता है। यदि ऐसा है तो एक रीबूट बड़े पैमाने पर प्रदर्शन को प्रभावित कर सकता है। (जो मुझे लगता है कि मुझे अपने स्वयं के कस्टम न्यूसक्वेंशियल आईडी की आवश्यकता है जो रीबूट से प्रभावित नहीं है।) क्या यह सही है? या क्या कोई जादू है जिसके बारे में मुझे पता नहीं है?

संपादित करें: क्लस्टर सूचकांक के रूप में GUID मेरे मानक में दृढ़ता से निराश है। जैसा कि मैंने उपरोक्त कहा है, ऐसे कई कारण हैं कि यह एक बुरा विचार है। मैं यह पता लगाने की कोशिश कर रहा हूं कि यह एक और कारण है या नहीं।

+0

"यदि ऐसा है तो एक रीबूट बड़े पैमाने पर प्रदर्शन को प्रभावित कर सकता है।" - यही कारण है कि आप एक int पहचान() का उपयोग करना चाहते हैं, भले ही आप इसे सुनना नहीं चाहते हैं। – HardCode

उत्तर

1

आम तौर पर आप इस तरह के परिदृश्य के लिए अपने सभी पृष्ठों में रिक्त स्थान छोड़ने के लिए उचित FILL FACTOR के साथ अपनी अनुक्रमणिका बनायेंगे। ऐसा कहा जा रहा है कि रिक्त स्थान भरने के बाद क्लस्टर्ड इंडेक्स फिर से हो जाता है।

मुझे पता है कि आप क्लस्टर कुंजी के रूप में GUID का उपयोग करके चर्चा नहीं करना चाहते हैं, लेकिन यह एक कारण है कि यह एक अनुशंसित अभ्यास नहीं है।

क्या होगा कि आपके पास पेज स्प्लिट की बढ़ती मात्रा होगी, जिससे आप पंक्तियों को डालने के दौरान बहुत अधिक विखंडन का नेतृत्व करेंगे, और आपको अपनी अनुक्रमणिका को उच्च आवृत्ति पर पुनर्निर्माण करने की आवश्यकता होगी लाइन में प्रदर्शन।

विषय पर एक पूर्ण उपचार के लिए, कोई बेहतर स्रोत है

Kim
Tripp's
Blog

एक तरफ ध्यान दें के रूप में, जब आप अपने खुद के NewSequentialID सृजन समारोह बनाने पर विचार कर रहे हैं, तो आप शायद से एक डिजाइन मुद्दा है और अपनी योजना पर पुनर्विचार करना चाहिए।

+0

मैंने पहले से ही अपनी कई पोस्ट पढ़ी हैं। एक क्लस्टर सूचकांक के रूप में GUID मेरे मानक में दृढ़ता से निराश है। मैं क्यों एक मामला बनाने की कोशिश कर रहा हूं। (इसलिए यह सवाल।) – Vaccano

+0

एक बार भरने का कारक पहुंचने के बाद, क्या प्रत्येक प्रविष्टि एक पुनर्वितरण का कारण बन जाएगी? – Vaccano

+0

यह निर्भर करता है। भरें कारक पृष्ठ से है, इसलिए पृष्ठ भरने के बाद हाँ। बाद के आवेषण एक पुनरावृत्ति का कारण बनेंगे यदि उन्हें जिस पृष्ठ को सम्मिलित करने की आवश्यकता है वह पूर्ण है। – JNK

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