मुझे Microsoft SQL सर्वर में XML डेटा प्रकार का उपयोग कब करना चाहिए?
मुझे Microsoft SQL सर्वर में XML डेटा प्रकार का उपयोग कब करना चाहिए?
जवाबों:
मैंने एक समान काम किया है जहां मैं भंडारण के लिए XML के लिए ऑब्जेक्ट डेटा को क्रमबद्ध करता हूं। यह जटिल ऑब्जेक्ट्स के डेटा को रखने के लिए टेबल, कॉलम और रिश्तों को रखने के बोझ को हटा देता है। एक स्कीमा का उपयोग करके प्रक्रिया की मदद की जा सकती है जो XML के अनुरूप होती है, और डेटाबेस तालिकाओं का उपयोग मेटा ऑब्जेक्ट के बारे में जानकारी के लिए किया जा सकता है। मेरे मामले में, ऑब्जेक्ट लेआउट को समायोजित करने के लिए डेटाबेस स्कीमा का विस्तार करना एक बड़ा काम होगा!
व्यक्तिगत रूप से, मैंने पहले कभी SQL सर्वर में XML फ़ील्ड प्रकार का उपयोग नहीं किया है, और मैंने बहुत सारे डेटाबेस प्रोग्रामिंग किए हैं क्योंकि उन्होंने इस सुविधा को जोड़ा है। एक डेटाबेस में मूल रूप से XML सामग्री का उपयोग करने के लिए मुझे हमेशा एक प्रोग्रामेटिक और प्रदर्शन ओवरहेड प्रतीत होता था। मैंने ईमानदारी से सोचा था कि यह एक नौटंकी थी, क्योंकि हर कोई 2000 की शुरुआत में एक बिंदु पर एक्सएमएल ट्रेन पर था। "ओह एक्सएमएल गर्म है, इसलिए हम इसे एसक्यूएल सर्वर से जोड़ते हैं ताकि हम पसीने से न दिखें।"
आपके द्वारा प्राप्त किए गए XML- आधारित डेटा संदेशों को रिकॉर्ड करने में सबसे अच्छा व्यवसाय का मामला मैं देख सकता हूं, जहां आप उनकी संरचना और डेटा में झांकना चाहते हैं, लेकिन व्यापार या कानूनी कारणों से मूल संदेश की अखंडता बनाए रखना चाहते हैं। ओवरहेड एक्सएमएल को टेबल संरचना में अनुवाद करने के लिए बहुत अच्छा हो सकता है, लेकिन SQL सर्वर में एक्सएमएल क्षमताओं का उपयोग करने से डेटा की जांच करने की लागत को कम करके इसे वारंट तक पर्याप्त किया जा सकता है।
संभवतः दर्जनों अन्य कारण हैं कि आप इसका उपयोग क्यों करना चाहते हैं, लेकिन स्पष्ट रूप से मुझे लगता है कि आपको SQL सर्वर में XML के साथ हॉग-वाइल्ड जाने से पहले खुशी के अन्य रास्तों पर विचार करना चाहिए जब तक कि आपके पास ऐसा करने के लिए बहुत विशिष्ट व्यावसायिक कारण न हों। यदि यह अधिक समझ में आता है, तो एक चरचर (अधिकतम) या पाठ क्षेत्र का उपयोग करें।
जाहिर है बस मेरी राय :)
मुझे केवल कुछ परिदृश्यों का सामना करना पड़ा है जहाँ मैं सक्रिय रूप से SQL सर्वर में XML डेटा प्रकार का उपयोग करना चाहूंगा। यह मेरे सिर के ऊपर से है, कम से कम सबसे दिलचस्प क्रम में:
सभी ने कहा, 99% समय, स्कीमा डिजाइन करते समय मुझे XML क्षेत्र की बिल्कुल आवश्यकता नहीं है।
जब मैंने SQL सर्वर में XML डेटा प्रकार को देखा है, तो इसे मूल रूप से एक ऐसे क्षेत्र के रूप में उपयोग किया जाता है, जो डेटाबेस में किसी भी अन्य की तरह ही उपयोग किया जाता है, जिसमें यदि आपके पास डेटा की बड़ी मात्रा है, तो कुछ बहुत खराब प्रदर्शन प्रभाव पड़ सकते हैं । इसका एक कारण है कि इसे SQL सर्वर कहा जाता है और XML सर्वर नहीं। :-) एक्सएमएल के खिलाफ जाने वाले प्रश्न केवल एक नियमित रूप से चयनित क्वेरी करने के रूप में तेज़ नहीं हैं।
मैं यह देख सकता हूँ कि इसे XML स्टोर करने के लिए उपयोग किया जा रहा है, जो कि बहुत अधिक नहीं है, एक्सएमएल डेटा प्रकार में पूर्ण XML दस्तावेज़ को संग्रहीत करने का कहना है, लेकिन XML दस्तावेज़ के साथ अलग-अलग खोजे गए फ़ील्ड (कुंजियाँ) संग्रहीत हैं। इस तरह से आप अपनी जानकारी को तेज़ी से क्वेरी कर सकते हैं और उस XML दस्तावेज़ को खींच सकते हैं जब आप उस बिंदु पर पहुँच जाते हैं जहाँ आप पूरा दस्तावेज़ देखना चाहते हैं। मुझे वास्तव में वापस जाना पड़ा है और एक नंबर ऐप के साथ ऐसा करना है जहां लोगों ने एक्सएमएल डेटा प्रकार का उपयोग करने के लिए एक बहुत ही कठिन क्षेत्र के रूप में उपयोग करने की कोशिश की है और डेटा उस बिंदु तक बढ़ गया है जहां क्वेरी बहुत धीमी हो गई है।
मैंने ज्यादातर एएसएमएक्स वेब सेवाओं या डब्ल्यूसीएफ सेवाओं से संबंधित उद्देश्यों के लिए एक्सएमएल प्रकार के खेतों का उपयोग किया है। आप अनुरोध या प्रतिक्रिया संदेशों को सहेज सकते हैं।
ज्यादातर बार, आप संदर्भ उद्देश्यों के लिए डीबी में XML को सहेजते हैं - आपकी नियमित व्यावसायिक गतिविधि के लिए नहीं (कोड से इसे हर 5 सेकंड में क्वेरी करने के लिए नहीं)। यदि आप अपने आप को ऐसा करते हुए पाते हैं, तो उन क्षेत्रों को निर्धारित करें जिन्हें आप आमतौर पर क्वेरी करते हैं या अधिकांश समय का उपयोग करते हैं और उनके लिए अलग कॉलम बनाते हैं। इस तरह, जब आप XML को DB में सहेज रहे हैं, तो आप इन फ़ील्ड्स को निकाल सकते हैं और उन्हें उनके संबंधित कॉलम में सहेज सकते हैं। बाद में उन्हें पुनर्प्राप्त करते समय आपको XML दस्तावेज़ को क्वेरी करने की आवश्यकता नहीं होगी आप इस उद्देश्य के लिए आपके द्वारा बनाए गए कॉलम का उपयोग कर सकते हैं।
ये ऐसे परिदृश्य हैं जो एसक्यूएल सर्वर में एक्सएमएल क्षेत्रों को अनुमति देने के लिए किन परिस्थितियों में मौजूद होंगे, इस पर विचार करते समय मन में भारी उत्साह आता है:
मैं डेटाबेस में एकल कॉल में संरचित डेटा को बचाने के लिए क्लाइंट-सर्वर ऐप में बड़े पैमाने पर XML का उपयोग करता हूं। एक उदाहरण के रूप में विस्तार लाइनों के साथ एक चालान ले लो। यह ग्राहक को एक्सएमएल में व्यावसायिक वस्तु को क्रमबद्ध करना और एक कॉल में संग्रहित खरीद के लिए पास करना सरल है। खरीद यह निर्णय लेती है कि आवेषण या अद्यतन आवश्यक है या नहीं; यह विस्तार से रिकॉर्ड करने के लिए पेरेंट इनवॉइस आईडी (एक पहचान स्तंभ) प्राप्त कर सकता है, सभी एक सर्वर-साइड लेनदेन के भीतर और क्लाइंट के बिना कई राउंड ट्रिप करने के लिए। हेडर रिकॉर्ड को निर्दिष्ट करने के लिए मुझे 20 या तो मापदंडों की आवश्यकता नहीं है और मुझे हर इनवॉइस लाइन के लिए कॉल करने की आवश्यकता नहीं है। इसके अलावा, ग्राहक को छूने के बिना, स्कीमा परिवर्तन करना या लॉगिंग / ऑडिटिंग को शुरू करना अक्सर संभव होता है।