क्लस्टर किए गए कॉलमस्टोर इंडेक्स और विदेशी कुंजी


18

मैं इंडेक्स का उपयोग करके एक डेटा वेयरहाउस का प्रदर्शन कर रहा हूं। मैं SQL Server 2014 के लिए काफी नया हूँ। Microsoft निम्नलिखित का वर्णन करता है:

"हम बड़े डेटा वेयरहाउसिंग तथ्य तालिकाओं को संग्रहीत करने के लिए क्लस्टर किए गए कॉलमस्टोर इंडेक्स को मानक के रूप में देखते हैं, और यह उम्मीद करते हैं कि इसका उपयोग अधिकांश डेटा वेयरहाउसिंग परिदृश्यों में किया जाएगा। चूंकि क्लस्टर किए गए कॉलमस्टोर इंडेक्स अपग्रेड करने योग्य है, इसलिए आपका वर्कलोड बड़ी संख्या में इन्सर्ट, अपडेट कर सकता है। और ऑपरेशन हटाएं। " http://msdn.microsoft.com/en-us/library/gg492088.aspx

हालाँकि यदि आप प्रलेखन में आगे पढ़ते हैं तो आपको सीमाएँ और प्रतिबंध मिलेंगे:

"अद्वितीय बाधाएँ, प्राथमिक कुंजी बाधाएँ या विदेशी कुंजी बाधाएँ नहीं हो सकती हैं।"

यह मुझे बहुत भ्रमित करता है! विभिन्न कारणों से डेटा वेयरहाउस में विदेशी कुंजी होना एक अच्छा अभ्यास (अनिवार्य नहीं) है (डेटा अखंडता, सिमेंटिक परत के लिए दिखाई देने वाले संबंध ...)

इसलिए Microsoft डेटा वेयरहाउस परिदृश्यों के लिए क्लस्टर किए गए कॉलमस्टोर इंडेक्स की वकालत करता है; हालाँकि, यह विदेशी कुंजी रिश्तों को संभाल नहीं सकता है ?!

क्या मैं इस पर सही हूं? आप किन अन्य दृष्टिकोणों की सलाह देंगे? अतीत में, मैंने डेटा वेयरहाउस परिदृश्यों में गैर-संकुल कॉलमस्टोर इंडेक्स का उपयोग किया है, डेटा लोड के लिए ड्रॉप और पुनर्निर्माण के साथ। हालाँकि SQL Server 2014 तब डेटा वेयरहाउस के लिए कोई वास्तविक नया मान नहीं जोड़ता है ??


जैसा कि फीचर परिपक्व होता है, आप अधिक से अधिक इन सुविधाओं का समर्थन करते हुए देखेंगे (हेक, 2012 में, कॉलमस्टोर इंडेक्स केवल पढ़े गए थे!)। इस बीच, आपको ट्रेड-ऑफ की पेशकश की जाती है - सीमाओं के साथ शानदार प्रदर्शन, या वही पुराना वही पुराना। मेरा यह भी मानना ​​है कि उनका मतलब यह नहीं है कि आपके डीडब्ल्यू में हर टेबल पर क्लस्टर कॉलमस्टोर इंडेक्स होने चाहिए और न कि किसी टेबल पर कोई बाधा होनी चाहिए - संभवत: किसी भी डीडब्ल्यू में टेबल की एक सीमित संख्या है जो आपको बहुत बड़ा धमाका देगी। हिरन।
हारून बर्ट्रेंड

3
खबरदार -यह जॉइन को हैंडल कर सकता है। एक FK संबंध में शामिल होने के लिए पूरी तरह से आवश्यक नहीं है। यह संदर्भात्मक अखंडता को संभालने के लिए है - जो कि अच्छा है लेकिन एक डेटा वेयरहाउस में छोड़ा जा सकता है। जोखिम में, हां, लेकिन प्रदर्शन लाभ के साथ भी।
टॉमटॉम

8
इसके अलावा - "कोई वास्तविक नया मूल्य नहीं"? आपका मतलब है कि आप में सुधार की तरह आवाज़ नहीं है और क्लस्टर किया जा रहा है? उपयोगकर्ताओं को ड्रॉप के लिए प्रतीक्षा करने और अधिक वर्तमान डेटा प्राप्त करने के लिए पुनर्निर्माण करने के बजाय वास्तविक समय में डेटा को क्वेरी करने में सक्षम होने के बाद आपके उपयोगकर्ताओं के लिए एक अच्छी बात और आपके लिए कम रखरखाव नहीं लगता है? कंधे उचकाने की क्रिया
हारून बर्ट्रेंड

आप अनुक्रमित दृश्य बनाकर (अद्वितीय) अनुक्रमित कर सकते हैं। ऐसा लगता है कि सूचकांक रखरखाव का बुनियादी ढांचा पहले से ही है। यह सिर्फ इतना है कि सामान्य सूचकांक अभी तक लागू नहीं हुए हैं।
usr

@AaronBertrand विदेशी कुंजी के साथ तथ्य तालिका के साथ एक DWH परिदृश्य में Clustered Columnstore इंडेक्स काम नहीं करता है। यह माइक्रोसॉफ्ट के साथ बड़े विपरीत में यह उम्मीद करता है कि बड़े तथ्य तालिकाओं को संग्रहीत करने के मानक के रूप में। मुझे उम्मीद है कि आप मुझे गलत साबित कर सकते हैं ...? क्योंकि मुझे SQL Server पसंद है।
ओवरफ्लोस्टैक

जवाबों:


13

आपको यहाँ बहुत सारे प्रश्न मिले हैं:

प्रश्न: (विदेशी कुंजी की कमी) मुझे बहुत भ्रमित करती है! विभिन्न कारणों से (डेटा अखंडता, शब्दार्थ परत के लिए दिखाई देने वाले संबंध, ...) के लिए DWH में Fk का होना एक अच्छा अभ्यास (अनिवार्य नहीं) है।)

A: सही है, यह आम तौर पर एक डेटा वेयरहाउस में विदेशी कुंजी रखने के लिए एक अच्छा अभ्यास है। हालाँकि, क्लस्टर किए गए कॉलमस्टोर इंडेक्स अभी तक समर्थन नहीं करते हैं।

Q: तो MS, DWH परिदृश्यों के लिए संकुल कॉलम अनुक्रमणिका की वकालत करता है, हालाँकि यह FK रिश्तों को संभाल नहीं सकता है ?!

A: Microsoft आपको टूल देता है। यह आपके ऊपर है कि आप उन उपकरणों का उपयोग कैसे करते हैं।

यदि आपकी सबसे बड़ी चुनौती आपके डेटा वेयरहाउस में डेटा अखंडता की कमी है, तो आप जिस टूल को चाहते हैं वह विदेशी कुंजी के साथ पारंपरिक टेबल है।

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

क्यू: हालांकि SQL 2014 DWH के लिए कोई वास्तविक नया मूल्य नहीं जोड़ता है ??

A: शुक्र है, SQL Server 2014 में क्लस्टर किए गए कॉलमस्टोर केवल नई सुविधा नहीं थी। उदाहरण के लिए, नए कार्डिनल अनुमानक की जाँच करें

प्रश्न: जिस तरह से मेरी पसंदीदा विशेषता को लागू किया गया, उसके बारे में मैं इतना क्रोधित और कड़वा क्यों हूं?

A: आपने मुझे पकड़ा है - आपने वास्तव में यह सवाल नहीं पूछा है - लेकिन मैं इसका वैसे भी जवाब दूंगा। तीसरे पक्ष के सॉफ़्टवेयर की दुनिया में आपका स्वागत है जहां सब कुछ आपके सटीक विनिर्देशों के अनुसार नहीं बनाया गया है। अगर आप किसी Microsoft उत्पाद में परिवर्तन देखना चाहते हैं, तो Connect.Microsoft.com देखें । यह उनकी प्रतिक्रिया प्रक्रिया है जहां आप एक परिवर्तन प्रस्तुत कर सकते हैं, अन्य लोग इसे वोट कर सकते हैं, और फिर उत्पाद टीम इसे पढ़ती है और आपको बताती है कि वे इसे क्यों लागू नहीं करेंगे। कभी कभी। ज्यादातर समय वे इसे "मेरी मशीन पर काम नहीं करेगा" के रूप में चिह्नित करते हैं, लेकिन हे, कभी-कभी आपको कुछ जवाब मिलते हैं।


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

1
... और आयामों के लिए: "तेजी से डेटा लोड की अनुमति देने के लिए तथ्य और आयाम तालिकाओं के बीच विदेशी प्रमुख संबंधों को लागू करने से बचें। आप रिश्तों को दस्तावेज करने के लिए NOCHECK के साथ विदेशी कुंजी बाधाओं को बना सकते हैं; लेकिन उन्हें लागू नहीं करते हैं। डेटा अखंडता सुनिश्चित करें। हालांकि लुकअप को ट्रांसफ़ॉर्म करें, या डेटा के स्रोत पर डेटा अखंडता जांच करें "
एड्रियन टॉरी

6

मैं समझ सकता हूं कि आप कुछ टुकड़ों को महसूस करते हैं जिनका उपयोग आप गायब हैं। लेकिन वह केवल इसलिए कि वे गायब हैं।

फिर भी, SQL सर्वर का सफलतापूर्वक उपयोग किया जा रहा था जब फॉरेन कीज़ केवल एक अवधारणा थी (जिसे हमने उन दिनों में ट्रिगर्स के माध्यम से लागू किया था), न कि एक भौतिक कार्यान्वयन जैसे कि बाधा। डिक्लेरेटिव रेफ़रेंशियल इंटीग्रिटी कम से कम SQL Server 7.0 द्वारा थी, लेकिन वर्तमान कार्यान्वयन की तुलना में बहुत कमजोर है।

Clustered ColumnStore Index के मान के बारे में यह एक इंडेक्स प्रदान करता है और पंक्तियाँ अद्यतन करने योग्य होती हैं। आपको यह चर्चा मूल्यवान लग सकती है: http://sqlwithmanoj.com/2014/07/24/maintain-uniqueness-with-clustered-columnstore-index-sql-server-2014/

मनोज बताते हैं कि इस तालिका के शीर्ष पर अनुक्रमित / भौतिकीकृत दृश्य बनाने का एक तरीका है, पीके के रूप में क्लस्टरिंग कुंजी (तालिका / दृश्य का पहला स्तंभ)। चाहे वह आपको सूट करे, निश्चित रूप से, एक निर्णय है जो आपको करना है।

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


2

यह प्रश्न SQL 2014 से संबंधित है, लेकिन मैं SQL 2016 में किए गए परिवर्तनों के प्रकाश में अतिरिक्त जानकारी कॉलमस्टोरेक्स इंडेक्स को प्रदान करना चाहता हूं, क्योंकि विभिन्न संस्करणों में सीमाओं को छांटना मुश्किल हो सकता है और यह सवाल अभी भी Google पर काफी उच्च स्तर पर है:

SQL 2016 के लिए, Microsoft विदेशी कुंजी बाधाओं को लागू करने के लिए गैर-संकुलित btree अनुक्रमणिका (जिसे अब संकुल क्लस्टरस्टोर तालिका पर द्वितीयक अनुक्रमणिका के रूप में जोड़ा जा सकता है) का उपयोग करने के लिए एक विधि का वर्णन करता है, बशर्ते कि स्तम्भ तर्जनी से पहले बाधा जोड़ा जाता है: https: // docs .microsoft.com / en-us / एसक्यूएल / संबंधपरक-डेटाबेस / अनुक्रमित / columnstore-अनुक्रमित डिजाइन मार्गदर्शन

निको निगेबॉउर के पास इस बारे में एक ब्लॉग पोस्ट भी है; स्तंभस्तरीय तालिकाओं पर अद्वितीय / विदेशी बाधाओं को सीधे बनाना संभव है (मैं अपने काम में इस दृष्टिकोण को लागू कर रहा हूं): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- अधिक-क्लस्टर-columnstore-सुधार-इन-एसक्यूएल सर्वर-2016 /

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.