XML डेटा टाइप का उपयोग कब करें


12

मैं एक परियोजना पर एक डेटाबेस बनाने के लिए जिम्मेदार हूं। हमारे पास ऐसे क्षेत्र हैं जिनका शायद ही कोई मूल्य है (प्रत्येक 10,000 रिकॉर्ड में 1) और मैं इसे डेटाबेस में संग्रहीत करने के लिए सबसे अच्छा तरीका निकालने की कोशिश कर रहा हूं।

जहाँ तक मैं देख सकता हूँ मेरे पास 3 विकल्प हैं:

  1. प्रत्येक अतिरिक्त मान के लिए तालिका में एक स्तंभ जोड़ें
  2. एक लिंक की गई तालिका जोड़ें जो मूल तालिका को संदर्भित करती है और इसमें केवल वही रिकॉर्ड होते हैं जहां हमें एक मान संग्रहीत करने की आवश्यकता होती है
  3. मूल तालिका में XML डेटा प्रकार का उपयोग करें और इसमें सभी मान संग्रहीत करें।

क्या कोई अन्य विकल्प है जिस पर मैंने विचार नहीं किया है?

मैं प्रत्येक विधि के पेशेवरों और विपक्षों को काम करने की कोशिश कर रहा हूं। जहां तक ​​मैं बता सकता हूं कि 1 सबसे आसान होगा और 2 कम से कम जगह लेगा, लेकिन मैं 3 के लिए कई संसाधन खोजने के लिए संघर्ष कर रहा हूं।


1
एक डेटाबेस में xml दुरुपयोग के खिलाफ एक व्यक्तिगत शेख़ी जोड़ने के लिए मैं सीधे शीर्षक में सवाल का जवाब दूंगा और एक बड़ा वसा कहूंगा: कभी नहीं! प्रश्न के वास्तविक शरीर के लिए, मैं सहयोगियों को आपकी मदद करने दूंगा, क्योंकि आपके पास पहले से ही बहुत अच्छे उत्तर हैं :-)। पुनश्च: आप वास्तव में मेरे पहले वाक्य को अनदेखा कर सकते हैं।
मारी

आप कितने अतिरिक्त क्षेत्रों के बारे में बात कर रहे हैं? और क्या वे एक ही इकाई का हिस्सा बनने के लिए समझ में आते हैं?
एंड्रयू बर्टर्टन

जवाबों:


12

लगता है कि आपको जो चाहिए वह विरल स्तंभ और फ़िल्टर किए गए अनुक्रमित हैं और विकल्प 1 के साथ जाएं। ये इस परिदृश्य के लिए पूरी तरह से समर्थित और प्रलेखित विशेषताएं हैं।

SQL सर्वर डेटाबेस इंजन उस स्तंभ में मानों के संग्रहण को अनुकूलित करने के लिए स्तंभ परिभाषा में SPARSE कीवर्ड का उपयोग करता है। इसलिए, जब तालिका में किसी भी पंक्ति के लिए स्तंभ मान NULL होता है, तो मान को संग्रहण की आवश्यकता नहीं होती है।

मैं इस परिदृश्य में एक एक्सएमएल समाधान का अच्छा प्रदर्शन करने की कल्पना नहीं कर सकता, इसके पास अतिरेक मेटाडेटा का एक विशाल ओवरहेड होगा और क्वेरी के लिए धीमा होगा।


1
मुझे लगता है कि विरल स्तंभ मैं के बाद कर रहा हूँ। मैं कुछ निश्चित तालिकाओं पर संभवत: कुछ स्तंभों में संग्रहीत किए जाने वाले डेटा की बहुत कम मात्रा की अपेक्षा कर रहा हूं।
मैथ्यू स्टील ने

मुझे यकीन नहीं है कि अगर मैं इसे सही पढ़ रहा हूं, लेकिन इस लिंक के अनुसार विरल स्तंभ मूल रूप से एक डेटाबेस कार्यान्वयन हैं जो मैं 3 के लिए देख रहा था वैसे भी वे नहीं हैं? blog.sqlauthority.com/2008/07/14/…
मैथ्यू स्टीवर्स

यदि इसे आंतरिक रूप से लागू किया जाता है (और मुझे नहीं पता कि यह है, यह सिर्फ किसी का ब्लॉग है) तो आपको एक्सएमएल से निपटने या खुद को पार्स करने की आवश्यकता नहीं होगी - यह बिल्कुल एक नियमित तालिका के रूप में व्यवहार करेगा (किसी भी प्रतिबंध के साथ) डेटेटिस पर)
गयुस

5
  1. यदि SQL सर्वर में वैरिएबल लंबाई में एक अशक्त स्तंभ कोई स्थान नहीं लेता है । NULL होने का तथ्य NULL बिटमैप में संग्रहीत होता है । यदि आप फ़िल्टर किए गए अनुक्रमित के साथ आवश्यक हैं तो आप इसे अनुक्रमित कर सकते हैं ताकि आप NULL स्तंभों को अनदेखा कर सकें।

  2. जब आप बिंदु 1 पर विचार करते हैं तो जटिलता जोड़ता है।

  3. मत करो। खोज, पार्स आदि के लिए कठिन: आपको बाद में पछतावा होगा

यह आकार पर भी निर्भर करता है: क्या यह कुछ अरब पंक्तियों के लिए चार (1000) होगा? या 100k पंक्तियों के लिए टिनींट? यदि उत्तरार्द्ध बिंदु 2 की जोड़ी गई जटिलता पर विचार करें: इसके लायक नहीं है।


क्या आपके पास एक संदर्भ है कि एक अशक्त स्तंभ जो अशक्त है, कोई स्थान नहीं लेता है। मुझे पता था कि यह शून्य बिटमैप में संग्रहित था या नहीं, लेकिन निश्चित लंबाई वाले फ़ील्ड के लिए सोचा गया था कि डेटा अभी भी तालिका में संग्रहीत था। मैं इन मूल्यों में से अधिकांश के लिए उपयोग कर रहा हूँ डेटाटाइप पैसा है (इसलिए 8 बाइट्स)
मैथ्यू स्टीयर्स

1
@ मैथ्यू स्टील: मैंने कहा कि परिवर्तनीय लंबाई पहले से ही कोई जगह नहीं लेती है। और संदर्भ के लिए sqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx#p41 इन 8 बाइट्स के लिए पंक्तियाँ कैसे हो सकती हैं?
gbn

फिलहाल हम 500,000 पंक्तियों में हैं, लेकिन एक बार ठीक से रहने के बाद हम प्रति सप्ताह लगभग 1 मिलियन की दर से विस्तार (उम्मीद) कर रहे हैं।
मैथ्यू Steeples

3

SQL सर्वर 2008 के साथ आपके पास विरल स्तंभों का उपयोग करने का अतिरिक्त विकल्प है, जो विशेष रूप से आपके द्वारा उल्लिखित स्थिति के लिए डिज़ाइन किए गए हैं।

उनके पास अतिरिक्त लाभ है कि आप उन्हें XML COLUMN_SET का उपयोग करके एक संयुक्त XML ऑब्जेक्ट के रूप में देख सकते हैं या उन्हें व्यक्तिगत रूप से संदर्भित कर सकते हैं और वे एक जबरदस्त स्थान बचत प्रदान करते हैं।

अधिक जानकारी के लिए निम्नलिखित ब्लॉग लेख देखें: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx


-4

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


3
-1 के रूप में, जबकि यह सच है कि "तालिकाओं का उपयोग नहीं है" एक है विकल्प , जवाब स्पष्ट रूप से तालिका संरचनाओं के खिलाफ एक शेख़ी बताते हुए है और वास्तव में एक मददगार जवाब प्रस्तुत करने नहीं।
एंड्रयू बिकर्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.