2008-10-08 14 views
12

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

उत्तर

0

आप वहां उपयोगकर्ता उत्पन्न XML को स्टोर कर सकते हैं।

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

+0

क्या आप विस्तृत कर सकते हैं? –

+0

यह आप एक लोंगवर्चर क्षेत्र के साथ भी कर सकते हैं। – Horcrux7

+0

लेकिन क्या आप यह कहने के लिए एक वर्कर पर बाधा डाल सकते हैं कि यह वैध एक्सएमएल होना चाहिए। – tpower

1

मान लें कि आपके पास एक ऐसी इकाई है जिसमें विशेषताएं हैं। आप एक अलग विशेषता तालिका बनाने के बजाय एक्सएमएल में उन सभी विशेषताओं को स्टोर कर सकते हैं। एक्सएमएल अधिक लचीला होगा।

5

यदि आपको आवश्यकता दिखाई नहीं देती तो परिवर्तन न करें!

कभी-कभी आपको उस डेटा को जारी रखना होता है जिसमें ज्ञात संरचना नहीं होती है, या इसकी संरचना बहुत अस्थिर होती है। उन मामलों में, तालिका बनाने के बजाय, बस एक्सएमएल को अपनी मौजूदा तालिका में सहेजें

+0

यदि इसका एक्सएमएल यद्यपि, क्या आप इसकी अपेक्षा नहीं करेंगे कि यह निश्चित, या कम से कम अच्छी तरह परिभाषित संरचना हो? –

+2

एक्सएम में एक्स एक्स के लिए क्या खड़ा है? यदि आप तय करना चाहते हैं तो आप केवल टेबल और फ़ील्ड का एक सेट उपयोग करेंगे। अच्छी तरह से परिभाषित ठीक है लेकिन डेटाबेस स्कीमा परिवर्तनों को धक्का देकर परिभाषा अधिक बार बदल सकती है। – AnthonyWJones

0

लचीलापन एक कारण है।

यदि आपके डेटा की संरचना भिन्न हो सकती है, तो आप अभी भी एक सामान्य आरडीबीएमएस तालिका, प्रश्नों के साथ आदि रख सकते हैं, जो इसके बाद कुछ हद तक संरचित डेटा के साथ है।

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

+0

मुझे यकीन नहीं है कि यह इतना आसान है। यदि एक्सएमएल निकालने के लिए प्रश्नों को लिखा जा रहा है तो इसकी संरचना बदलना अभी भी कोड को तोड़ सकता है जो परिणामों को संसाधित करता है। –

1

आप SQL सर्वर में सीधे XML डेटा संसाधित कर सकते हैं। जैसे आप XPath अभिव्यक्तियों को लागू कर सकते हैं और केवल फ़िल्टर किए गए परिणाम सेट को क्लाइंट को भेज सकते हैं। एसक्यूएल सर्वर विशेषताएं बाद में एक्सएमएल प्रोसेसिंग क्षमताओं पर निर्माण कर सकती हैं।

सुविधाओं ऊपर एमएस एसक्यूएल सर्वर से मौजूद 2000 या 2005

+0

लेकिन क्या आप केवल सर्वर में एक्सएमएल को संसाधित करेंगे यदि आप सर्वर/क्लाइंट एप्लिकेशन में बहुत अधिक स्थानांतरित करने के ओवरहेड के बारे में चिंतित थे? – tpower

+0

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

+0

SQL सर्वर में प्रसंस्करण XPath बहुत धीमी है। –

2

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

ऐसा करने के लिए आपको डीबी इंजन पर अधिक एक्सएमएल-विशिष्ट समर्थन की आवश्यकता नहीं है, लेकिन यह अभी भी प्रश्नों को अभिव्यक्ति रखने में मदद करता है।

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

5

मेरे पास एक अच्छा वास्तविक जीवन उदाहरण है। मेरे ग्राहकों में से एक को अपने आपूर्तिकर्ताओं से अक्सर कुछ महत्वपूर्ण डेटा के साथ एक एक्सएमएल फ़ाइल प्राप्त होती है। यह गहराई से घोंसला है। क्या बदल गया है यह देखने के लिए उन्हें पिछली एक्सएमएल फ़ाइल के साथ इसकी तुलना करने की आवश्यकता है। डेटाबेस में एक्सएमएल समर्थन के बिना, मुझे एक ऐसा टूल बनाना था जो एक्सएमएल नोड्स के माध्यम से पुनरावृत्त हो और रिलेशनल डेटाबेस की तालिकाओं में मैचों की तलाश करे। मैं कुछ एक्सएमएल-एक्सएमएल तुलना उपकरण का उपयोग कर सकता हूं, लेकिन कुछ चेक कुछ अन्य डेटा से संबंधित हैं जो एक्सएमएल फ़ाइल से नहीं आए हैं और मुझे उन सभी में शामिल होने की आवश्यकता है। ठीक है, यह सब इतना बड़ा सौदा नहीं है, लेकिन फिर भी - एक्सएमएल डेटाबेस के साथ आप उस कार्यक्षमता को आउट ऑफ़ द बॉक्स प्राप्त करते हैं।

3

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

नकारात्मकता यह है कि XML कॉलम पर रिपोर्टिंग, क्वेरीिंग और अपडेट अधिक कठिन होते हैं। चेक बाधाओं जैसी सामान्य अच्छी डेटाबेस सुविधाओं में से कोई भी नहीं है।

1

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

+0

मैंने यह भी किया है, लेकिन यह बुरी तरह से स्केल करता है। कुछ रिपोर्टें हम हजारों पंक्तियों में भाग गए थे। एक्सएमएल को सभी को एक बार में स्मृति में होना था (पहले डीबी पर, फिर क्लाइंट पर) एक रिकॉर्डसेट बनाम और उपभोग किया जा रहा था। –

3

मैं किसी तृतीय-पक्ष सेवा से प्राप्त सभी व्यावसायिक-महत्वपूर्ण संदेशों की प्रतिलिपि बनाने के लिए XML कॉलम प्रकार का उपयोग करता हूं। यह कुछ कारणों से बहुत आसान है।

1) डेटा भ्रष्टाचार के मामले में, हम यह देखने के लिए पीछे-पीछे देख सकते हैं कि कौन सा डेटा आया था, और किस प्रारूप में।
2) सिस्टम पर भविष्य का विकास कार्य लॉग तालिका से वास्तविक डेटा पर आधारित हो सकता है - बस deserialise और डेटा का उपयोग करें जैसे कि यह कॉल से 3p सेवा
3) सुनिश्चित करता है कि अवरोधक लोग डिस्क आवंटित करने में व्यस्त हैं डीबी सर्वर के लिए जगह। ;)

+1

यह इसका उपयोग करने के सर्वोत्तम कारणों में से एक जैसा लगता है। तीसरे पक्ष के साथ व्यवहार करते समय कोई गारंटी नहीं है। :-P – user420667

4

एकमात्र कारण मैं कभी भी इसका उपयोग करूँगा जब एक्स्टेंसिबिलिटी & लचीलापन के लिए।

एक्सएमएल (एक्सपैथ) और रखरखाव (नेमस्पेस) का ओवरहेड वास्तव में परेशानी के लायक नहीं है यदि आप इससे बच सकते हैं। हमने पहले एक्सएमएल में बड़ी मात्रा में डेटा संग्रहीत किया है और इसे पुनर्प्राप्त करने के लिए स्केलर फ़ंक्शंस का उपयोग किया है, लेकिन यह बहुत धीमा है और अत्यधिक सिरदर्द एक्सएमएल संरचना या नामस्थान परिवर्तन का कारण बनता है।

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

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

संक्षेप में, आप एक्सएमएल में आवश्यक गुण डालकर शुरू नहीं करते हैं। लेकिन जब आप जानते हैं कि आपकी तालिका को विस्तारित करने की आवश्यकता हो सकती है, तो आपको एक्सएमएल जोड़ना चाहिए, ठीक है क्योंकि यह आपको विस्तार का विकल्प देता है।

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