मुझे SQL सर्वर में XML डेटा प्रकार का उपयोग कब करना चाहिए?


15

मुझे Microsoft SQL सर्वर में XML डेटा प्रकार का उपयोग कब करना चाहिए?

जवाबों:


1

मैंने एक समान काम किया है जहां मैं भंडारण के लिए XML के लिए ऑब्जेक्ट डेटा को क्रमबद्ध करता हूं। यह जटिल ऑब्जेक्ट्स के डेटा को रखने के लिए टेबल, कॉलम और रिश्तों को रखने के बोझ को हटा देता है। एक स्कीमा का उपयोग करके प्रक्रिया की मदद की जा सकती है जो XML के अनुरूप होती है, और डेटाबेस तालिकाओं का उपयोग मेटा ऑब्जेक्ट के बारे में जानकारी के लिए किया जा सकता है। मेरे मामले में, ऑब्जेक्ट लेआउट को समायोजित करने के लिए डेटाबेस स्कीमा का विस्तार करना एक बड़ा काम होगा!


यह जवाब मेरी राय के सबसे करीब है। आप XQuery का उपयोग करके अंतर्निहित डेटा को क्वेरी कर सकते हैं यदि आपको या तो एक सामान्य टेबल-आधारित डेटासेट वापस करने की आवश्यकता है या परिणाम के लिए एक नया प्रारूप का निर्माण करना है। मेरा प्रश्न मूल रूप से पूछा गया था कि यह XML का उपयोग करने के लिए कैसे संभव है, यह कहते हुए कि मेरी अपनी राय है और दूसरों की राय सुनना पसंद करेंगे और आपका उत्तर इसके लिए एक वास्तविक, व्यवहार्य उपयोग के मामले की व्याख्या करता है।
FarligOpptreden

11

व्यक्तिगत रूप से, मैंने पहले कभी SQL सर्वर में XML फ़ील्ड प्रकार का उपयोग नहीं किया है, और मैंने बहुत सारे डेटाबेस प्रोग्रामिंग किए हैं क्योंकि उन्होंने इस सुविधा को जोड़ा है। एक डेटाबेस में मूल रूप से XML सामग्री का उपयोग करने के लिए मुझे हमेशा एक प्रोग्रामेटिक और प्रदर्शन ओवरहेड प्रतीत होता था। मैंने ईमानदारी से सोचा था कि यह एक नौटंकी थी, क्योंकि हर कोई 2000 की शुरुआत में एक बिंदु पर एक्सएमएल ट्रेन पर था। "ओह एक्सएमएल गर्म है, इसलिए हम इसे एसक्यूएल सर्वर से जोड़ते हैं ताकि हम पसीने से न दिखें।"

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

संभवतः दर्जनों अन्य कारण हैं कि आप इसका उपयोग क्यों करना चाहते हैं, लेकिन स्पष्ट रूप से मुझे लगता है कि आपको SQL सर्वर में XML के साथ हॉग-वाइल्ड जाने से पहले खुशी के अन्य रास्तों पर विचार करना चाहिए जब तक कि आपके पास ऐसा करने के लिए बहुत विशिष्ट व्यावसायिक कारण न हों। यदि यह अधिक समझ में आता है, तो एक चरचर (अधिकतम) या पाठ क्षेत्र का उपयोग करें।

जाहिर है बस मेरी राय :)


मुझे पता है कि इस मूल उत्तर को पोस्ट करने के बाद यह एक साल है, और b) XML के लिए जरूरी प्रासंगिक नहीं है, लेकिन मैं अभी भी XML के बारे में उसी तरह महसूस करता हूं जैसा कि अब मैं SQL सर्वर में JSON विधियों के समावेश के बारे में महसूस करता हूं।
CokoBWare

मुझे लगता है कि आधुनिक NoSQL (और हाइब्रिड) स्टोरेज विकल्प का आगमन मूल प्रश्न को निरर्थक बना देता है, क्योंकि मेरी राय के रूप में तब एक तरह से असंरचित डेटा संग्रहीत करने की दिशा में अधिक सक्षम था जो डेटाबेस में एक आर्कन स्कीमा नहीं बनाएगा।
FarligOpptreden

8

मुझे केवल कुछ परिदृश्यों का सामना करना पड़ा है जहाँ मैं सक्रिय रूप से SQL सर्वर में XML डेटा प्रकार का उपयोग करना चाहूंगा। यह मेरे सिर के ऊपर से है, कम से कम सबसे दिलचस्प क्रम में:

  • अन्य अनुप्रयोगों द्वारा उत्पन्न XML प्रतिक्रियाओं को संग्रहीत / संग्रहित करना
    • उदाहरण के लिए, हम कस्टम सिल्वरलाइट एप्लिकेशन और डायनेमिक्स AX के बीच संचार के लिए एप्लिकेशन इंटीग्रेशन फ्रेमवर्क (AIF) का उपयोग करते हैं। हम उन अनुप्रयोगों के बीच संचार समस्या निवारण में सहायता करने के लिए डेटाबेस में इनबाउंड और आउटबाउंड संदेश दोनों को संग्रहीत करते हैं
    • क्योंकि फ़ील्ड प्रकार एक सामान्य स्ट्रिंग प्रकार (यानी VARCHAR) के बजाय XML है, हम विशेष रूप से कुछ विशिष्ट मानदंडों से मेल खाने वाले संदेशों के लिए XQuery का उपयोग करने में सक्षम हैं। यह साधारण स्ट्रिंग LIKE मिलान के साथ और अधिक कठिन होगा
  • एक रचित प्रतिक्रिया संदेश को कैशिंग / जारी रखना
    • एक ट्रिगर या एप्लिकेशन कोड के साथ XML फ़ील्ड को अपडेट करें, जो एक गणना किए गए कॉलम की नकल करेगा
    • कॉलिंग एप्लिकेशन पर XML प्रतिक्रिया को लगातार प्राप्त करने के बजाय, आप तभी कहेंगे जब हर कॉल के बजाय, पंक्ति को ओवररेटेड किया जाता है।
    • यह सबसे अच्छा काम करता है जब चयन UPDATEs / INSERTs की तुलना में बहुत अधिक होते हैं, जो कि अधिकांश अनुप्रयोगों के लिए सही होता है
  • एक ही क्षेत्र में कई मूल्यों को संग्रहीत करना
    • मैंने जिन प्रथाओं को देखा है, उनमें से एक एकल फ़ील्ड में मानों के संग्रह को संग्रहीत करने के लिए XML डेटा प्रकार का उपयोग है
    • एक लाभ यह है कि आपको एक साधारण कुंजी / मान स्टोर के लिए तालिकाओं का एक अतिरिक्त सेट डिज़ाइन करने की आवश्यकता नहीं है
    • इसका एक नकारात्मक पक्ष यह है कि डेटा पूरी तरह से सामान्यीकृत नहीं है, जिससे क्वेरी कम स्पष्ट होती है
    • हालांकि, जैसा कि ऊपर उल्लेख किया गया है, आप पहचान के मानदंडों से मेल खाने वाली पंक्तियों का चयन करने के लिए एक्सएमएल का उपयोग उस एक्सएमएल क्षेत्र पर कर सकते हैं, जिससे आंशिक रूप से पूरी तरह से सामान्य नहीं होने के प्रभाव को कम किया जा सकता है।

सभी ने कहा, 99% समय, स्कीमा डिजाइन करते समय मुझे XML क्षेत्र की बिल्कुल आवश्यकता नहीं है।


4

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

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


4

मैंने ज्यादातर एएसएमएक्स वेब सेवाओं या डब्ल्यूसीएफ सेवाओं से संबंधित उद्देश्यों के लिए एक्सएमएल प्रकार के खेतों का उपयोग किया है। आप अनुरोध या प्रतिक्रिया संदेशों को सहेज सकते हैं।

ज्यादातर बार, आप संदर्भ उद्देश्यों के लिए डीबी में XML को सहेजते हैं - आपकी नियमित व्यावसायिक गतिविधि के लिए नहीं (कोड से इसे हर 5 सेकंड में क्वेरी करने के लिए नहीं)। यदि आप अपने आप को ऐसा करते हुए पाते हैं, तो उन क्षेत्रों को निर्धारित करें जिन्हें आप आमतौर पर क्वेरी करते हैं या अधिकांश समय का उपयोग करते हैं और उनके लिए अलग कॉलम बनाते हैं। इस तरह, जब आप XML को DB में सहेज रहे हैं, तो आप इन फ़ील्ड्स को निकाल सकते हैं और उन्हें उनके संबंधित कॉलम में सहेज सकते हैं। बाद में उन्हें पुनर्प्राप्त करते समय आपको XML दस्तावेज़ को क्वेरी करने की आवश्यकता नहीं होगी आप इस उद्देश्य के लिए आपके द्वारा बनाए गए कॉलम का उपयोग कर सकते हैं।


1

ये ऐसे परिदृश्य हैं जो एसक्यूएल सर्वर में एक्सएमएल क्षेत्रों को अनुमति देने के लिए किन परिस्थितियों में मौजूद होंगे, इस पर विचार करते समय मन में भारी उत्साह आता है:

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

-2

मैं डेटाबेस में एकल कॉल में संरचित डेटा को बचाने के लिए क्लाइंट-सर्वर ऐप में बड़े पैमाने पर XML का उपयोग करता हूं। एक उदाहरण के रूप में विस्तार लाइनों के साथ एक चालान ले लो। यह ग्राहक को एक्सएमएल में व्यावसायिक वस्तु को क्रमबद्ध करना और एक कॉल में संग्रहित खरीद के लिए पास करना सरल है। खरीद यह निर्णय लेती है कि आवेषण या अद्यतन आवश्यक है या नहीं; यह विस्तार से रिकॉर्ड करने के लिए पेरेंट इनवॉइस आईडी (एक पहचान स्तंभ) प्राप्त कर सकता है, सभी एक सर्वर-साइड लेनदेन के भीतर और क्लाइंट के बिना कई राउंड ट्रिप करने के लिए। हेडर रिकॉर्ड को निर्दिष्ट करने के लिए मुझे 20 या तो मापदंडों की आवश्यकता नहीं है और मुझे हर इनवॉइस लाइन के लिए कॉल करने की आवश्यकता नहीं है। इसके अलावा, ग्राहक को छूने के बिना, स्कीमा परिवर्तन करना या लॉगिंग / ऑडिटिंग को शुरू करना अक्सर संभव होता है।


मैं क्यों नीचे के रूप में हैरान हूँ। किसी भी downvoters मुझे प्रबुद्ध करने के लिए परवाह है?
रिक ब्रैडली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.