मैं SQL के बजाय XML का उपयोग कब करूंगा? [बन्द है]


102

मैं अब कुछ वर्षों के लिए डेटाबेस-संचालित वेब अनुप्रयोगों पर काम कर रहा हूं और हाल ही में एक सीएमएस से जुड़े प्रोजेक्ट पर लिया गया है जो एक्सएमएल-सक्षम है। इसने मुझे XML / XSLT के उपयोग के बारे में सामान्य रूप से सोचने के लिए प्रेरित किया है और किन स्थितियों में यह मेरे द्वारा हमेशा उपयोग किए जाने वाले दृष्टिकोण से अधिक उपयोगी होगा, जो कि मेरे (My) SQL डेटाबेस में मेरे सभी डेटा को संग्रहीत कर रहा है और फिर उपयोग कर रहा है PHP / पायथन / आदि। आवश्यकतानुसार वेब पर इसके साथ काम करना।

स्पष्ट रूप से कुछ ऐसा है जो मैं "यहाँ" नहीं कर रहा हूँ .. क्या कोई मुझे उन अनुप्रयोगों के उदाहरण दे सकता है जहां डेटाबेस में डेटाबेस के बजाय XML फ़ाइलों में डेटा संग्रहीत करना बेहतर होगा?


4
मुझे लगता है कि सवाल अधिक सटीक XML बनाम RDBMS है, न कि SQL।
JAL


4
मुझे लगता है कि सवाल अधिक सटीक रूप से फ़ाइल बनाम आरडीबीएमएस है, एक्सएमएल बनाम एसक्यूएल नहीं।
6

यदि आपके पास समय है, तो हाल ही में ट्यूरिंग अवार्ड विजेता माइकल स्टोनब्रोकर का "व्हाट गोज़ अराउंड कम्स अराउंड" डेटाबेस के इस इतिहास पर एक उत्कृष्ट पेपर है, जिसमें एक्सएमएल डेटाबेस ने पिछली गलतियों को कैसे दोहराया।
जेफरी बोसबोम

जवाबों:


100

इस पुस्तक को उद्धृत करने के लिए (प्रभावी XML: अपने XML को बेहतर बनाने के 50 विशिष्ट तरीके):

“XML एक डेटाबेस नहीं है। यह डेटाबेस होने के लिए कभी नहीं था। यह एक डेटाबेस होने वाला नहीं है। संबंधपरक डेटाबेस कार्यान्वयन अनुभव के 20 से अधिक वर्षों के साथ सिद्ध प्रौद्योगिकी है। वे ठोस, स्थिर, उपयोगी उत्पाद हैं। वे दूर नहीं जा रहे हैं। XML विभिन्न डेटाबेस के बीच या डेटाबेस और अन्य कार्यक्रमों के बीच डेटा स्थानांतरित करने के लिए एक बहुत ही उपयोगी तकनीक है। हालाँकि, यह स्वयं एक डेटाबेस नहीं है। इसे एक की तरह इस्तेमाल न करें। ”

मुझे लगता है कि अगर यह थोड़ा कुंद होता है, तो यह इसे पूरा करता है। XML एक डाटा इंटरचेंज फॉर्मेट है। किसी के पास XML पार्सिंग लाइब्रेरी हो सकती है जो XPath अभिव्यक्तियों के साथ एक DOM को क्वेरी कर सकती है, लेकिन यह DBMS के समान नहीं है। आप एक डोम / XPath इंटरफ़ेस के साथ एक DBMS बना सकते हैं, लेकिन ACID गुण या बड़े डेटा सेट प्राप्त करने के लिए आपको DBMS इंजन और डेटा फॉर्मेट को इंडेक्स, लॉगिंग और DBMS की अन्य कलाकृतियों के साथ लागू करने की आवश्यकता होती है - जो कि (परिभाषा के अनुसार) यह XML के अलावा कुछ और है।


1
मुझे पता है कि यह उत्तर 2008 में लिखा गया था, लेकिन कई फ़ाइल-आधारित डेटाबेस सिस्टम के आगमन के साथ मैं खुद को आश्चर्यचकित करता हूं कि क्या वे कई स्थितियों में पारंपरिक RDBMS की तुलना में अधिक समझ में आते हैं। SQL को अंधेरे युग में डिज़ाइन किया गया था जब डिस्क स्थान महंगा था, और यह सॉफ्टवेयर उद्योग के भीतर विचार का एक तरीका बन गया है। इसका मतलब यह नहीं है कि आधुनिक तरीकों के मामले में यह सही है।
pfeds

यह अभी भी XML को डेटाबेस नहीं बनाता है, बस कुछ के लिए एक क्रमांकन प्रारूप जो आप BLOB में संग्रहीत कर रहे हैं। यह आपके लिए उपयोगी हो सकता है लेकिन यह XML को पूर्ण रूप से चित्रित क्वेरी सुविधा का विकल्प नहीं बनाता है।
कंसर्नडऑफटुनब्रिजवेल्स

2
अधिक कुशल डिस्क-स्पेस प्रबंधन रिलेशनल डेटाबेस का एकमात्र लाभ नहीं है। अधिकांश रिलेशनल डेटाबेस निश्चित फ़ील्ड- और रिकॉर्ड-लंबाई के साथ काम कर रहे हैं जो उन्हें किसी भी अनुरोध पर निरंतर समय में प्रतिक्रिया करने में सक्षम बनाता है जबकि XML-, यमल-, JSon- और अन्य टेक्स्ट-आधारित डेटा स्टोर मूल रूप से टेक्स्ट-आधारित हैं, इसलिए सभी क्वेरीज़ गर्त पाठ पार्सिंग का प्रदर्शन किया जाता है, जिसमें प्रोसेसर समय में बहुत बड़ा ओवरहेड होता है, और इसे अप्रमाणित मात्रा में किया जा सकता है। यह केवल एक मेमरी (सीपीयू समय के संदर्भ में) के साथ काम किया जा सकता है जो विशाल मेमोरी आवश्यकताओं के साथ पूर्वनिर्मित है।
8:30 बजे mg30rg

यदि मैं डेटा को पुनः प्राप्त करने के लिए एक एसपी एसपी लिखता हूं और एक्सएसएलटी फाइल के बजाय प्रदर्शित करने के लिए एचटीएमएल का उपयोग करता हूं, तो क्या यह तेजी से या बस उसी के बारे में है?
SearchForKnowledge

1
आजकल आप XML डेटाबेस के लिए XQuery का उपयोग कर सकते हैं।
डॉन दिलंगा

23

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

XML का उपयोग करते समय निम्नलिखित लिंक का वर्णन करना बुरा नहीं है: मुझे XML का उपयोग क्यों करना चाहिए?


: के रूप में 2012-09-06 लिंक अद्यतन xml.silmaril.ie/index.html
WIP

15

एसक्यूएल अच्छा सारणीबद्ध डेटा है - डेटा जो आसानी से पंक्तियों और स्तंभों में फिट बैठता है। XML पदानुक्रमित डेटा के लिए अच्छा है - डेटा जिसमें विभिन्न आकारों के कई स्तर हैं।

SQL संग्रहण और खोज के लिए अच्छा है। XML संचारण और स्वरूपण के लिए अच्छा है।


10

1) जब आपको अपने डेटा को दूसरों के साथ बदलना है। XML वेब का " लिंगुआ फ्रेंका " है - बस एक डेटाबेस फ़ाइल के विपरीत हर कोई इसे पढ़ और व्याख्या कर सकता है।

2) जब आपका डेटा वॉल्यूम छोटा है और आपको इसके खिलाफ जटिल प्रश्न करने की आवश्यकता नहीं है। XML फाइल स्टोरेज कॉन्फ़िगरेशन या डॉक्यूमेंट टेम्प्लेट जैसी चीजों के लिए अच्छी हैं।

3) जब आपके पास एक ही डेटा तक पहुंचने की कोशिश करने वाले कई लेखक नहीं हैं। SQL डेटाबेस में समसामयिक तंत्र शामिल हैं जो आपके लिए पर्दे के पीछे काम कर रहे हैं। एसक्यूएल डेटाबेस बड़े डेटा सेट पर सूचना की पुनर्प्राप्ति के लिए अनुक्रमित का समर्थन कर सकते हैं ...


5

मैं XML के लिए जिन चीजों का उपयोग करता हूं:

  • किसी वस्तु के पदानुक्रम को जारी रखना।
  • एक प्रक्रिया या मशीन से दूसरे में डेटा ले जाना।
  • डेटा जो शायद ही कभी बदलता है, अगर बिल्कुल भी; कॉन्फ़िगरेशन सेटिंग्स और पसंद है।
  • चूंकि XSLT में इनपुट बदल जाता है: आम तौर पर बोलना, अगर मेरा कोई प्रोग्राम HTML का उत्सर्जन करता है, तो वह इसे करने के लिए XSLT का उपयोग कर रहा है, और इसलिए स्रोत डेटा कुछ पर XML के रूप में प्रतिनिधित्व करने वाला है।
  • पाठ मार्कअप। (चलो भूल नहीं है कि)!

उन उपयोग मामलों और डेटाबेस के लिए उपयोग मामलों के बीच ओवरलैप का एक बहुत कुछ नहीं है। कुछ, लेकिन ज्यादा नहीं।

विडंबना यह है कि जहां मैं इस समय XML का सबसे भारी उपयोग कर रहा हूं, वह एक डेस्कटॉप ऐप में है, जो इन-मेमोरी एडीओ डेटासेट बनाता है और इसे बनाए रखने और पुनः प्राप्त करने के लिए डेटासेट के राइटएक्सएमएल और रीडएक्सएमएल तरीकों का उपयोग करता है। मैं ADO का उपयोग कर रहा हूं, क्योंकि ADO का उपयोग करके मेटानोफॉर्मेशन द्वारा परिभाषित डेटा मॉडल को गतिशील रूप से बनाना बहुत आसान है, क्योंकि यह कार्य के लिए अपने स्वयं के ऑब्जेक्ट मॉडल को लागू करना होगा।

तो यहाँ एक मामला है जो दिखता है कि मैं एक डेटाबेस के रूप में एक्सएमएल का उपयोग कर रहा हूं। लेकिन मैं वास्तव में नहीं हूं। मैं एक ऑब्जेक्ट मॉडल का उपयोग कर रहा हूं जो बहुत सारे डेटाबेस जैसी कार्यक्षमता को कार्यान्वित करने के लिए होता है, और मैं XML को इसके दृढ़ता प्रारूप के रूप में उपयोग कर रहा हूं।


3

मेरा मानना ​​है कि काफी कम व्यावसायिक अनुप्रयोग हैं जो भंडारण माध्यम के रूप में XML का भारी उपयोग करते हैं। मैंने इसे एक प्रोजेक्ट प्लानिंग एप्लिकेशन के लिए किया है, जहां उपयोगकर्ता प्रत्येक प्रोजेक्ट को अपनी फ़ाइल में संग्रहीत करता है। एप्लिकेशन एक यूएसबी स्टिक पर रहता है, और इसके लिए शून्य इंस्टॉल की आवश्यकता होती है। सभी डेटा XML से खींचे जाते हैं और मेमोरी में काम करते हैं, इसलिए getRecord (id) तेजी से पागल होता है।

तो मेरा जवाब होगा .. जब डेटा स्मृति में होने के लिए काफी छोटा है, एक डेटाबेस खत्म हो गया है।



1

जब भी आपके पास डेटाबेस होने की लक्जरी नहीं है (एकल उपयोगकर्ता अनुप्रयोगों के बारे में सोचें) या बहुत हल्के भंडारण प्रारूप की आवश्यकता है।

इसके अलावा पिछले पोस्टर के रूप में, एक इंटरचेंज प्रारूप।


1

XML और RDMS दोनों को डेटास्टोर्स के रूप में उपयोग किया जा सकता है, लेकिन प्रत्येक कार्यान्वयन के अपने फायदे और कमियां हैं।

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

RDMS (डेटाबेस) आमतौर पर अधिक स्केलेबल होते हैं, अधिक संगामिति समर्थन प्रदान करते हैं और बड़ी मात्रा में डेटा के साथ काम करते समय बहुत तेज़ होते हैं। संबंधपरक मॉडल बाद में मेरा डेटा बनाना आसान बनाता है। डेटाबेस ऑब्जेक्ट-रिलेशनल इम्पेडेंस मिसमैच ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) से ग्रस्त हैं, जिससे आपको बदसूरत कोड लिखने या कॉम्प्लेक्स एमएम का उपयोग करने की आवश्यकता हो सकती है।


1

मैं जाता अगर मैं अपने मेजबान पर mysql डेटाबेस को सीमित करता, तो मैं XML को एक डाटस्टोर के रूप में उपयोग करने का अवसर देखता।


1

यहाँ SQL के साथ XML का उपयोग करने का एक उदाहरण है: प्रमाणित उपयोगकर्ता विभिन्न डेटाबेस में डेटा पढ़ते और लिखते हैं, जिनमें से सभी एक ही DBMS नहीं हैं। कंपनी A के लिए उपयोगकर्ता स्थानीय SQL सर्वर डेटाबेस से डेटा का उपयोग करते हैं। कंपनी B के उपयोगकर्ता दूरस्थ Oracle डेटाबेस के डेटा का उपयोग करते हैं। और इसी तरह। एक दर्जन अलग-अलग डेटाबेस, प्रत्येक एक ही मूल डेटा के लिए थोड़ा अलग स्कीमा के साथ।

वेबसाइट डेवलपर के पास दूरस्थ डेटाबेस पर संग्रहीत कार्यविधियाँ बनाने की क्षमता नहीं है। SQL को वेब ऐप से सीधे डेटाबेस में भेजा जाना चाहिए। चूंकि प्रत्येक डेटाबेस में थोड़ा अलग SQL सिंटैक्स और स्कीमा होता है, इसलिए प्रत्येक ऑपरेशन (SELECT, INSERT, आदि) के लिए 12 डेटाबेस में से प्रत्येक के लिए अलग SQL का उपयोग करना आवश्यक है।

वेब एप्लिकेशन में SQL स्टेटमेंट्स को एम्बेड करने के लिए विकल्पों में से एक उन्हें XML फ़ाइलों में रखना है। प्रत्येक XML फ़ाइल में दर्जन डेटाबेस में से एक के लिए SQL स्टेटमेंट का सेट होता है। कोड निर्धारित करता है कि लॉग-इन उपयोगकर्ता के लिए कौन सा डेटाबेस एक्सेस किया गया है, और निर्दिष्ट XML फ़ाइल से उपयुक्त SQL को पुनर्प्राप्त करता है।

संग्रहीत प्रक्रियाओं के साथ के रूप में, XML फ़ाइल में SQL अनुप्रयोग को रोकने या पुन: स्थापित किए बिना अपडेट किया जा सकता है।


0

कुछ एप्लिकेशन कॉन्फ़िगरेशन को स्टोर करने के लिए XML फ़ाइलों का उपयोग करते हैं, मैं ऐसा करने के लिए SQLite का उपयोग करना पसंद करता हूं ।


0

मैं अपने डेटा को संग्रहीत करने के लिए किसी भी तरह के XML का उपयोग कभी नहीं करूंगा।

हम अपने SOA ऐप में डेटा एब्स्ट्रक्शन लेयर के रूप में XSLT ट्रांसफॉर्मेशन का उपयोग करते हैं। सभी ऑब्जेक्ट XSLT में एक दूसरे को डेटा भेजते हैं, इसलिए केवल एक ही भाषा है जिसे उन्हें समझने की आवश्यकता है। डेटाबेस कनेक्टर को छोड़कर, जो डेटा को SQL में बदलने में सक्षम होने के लिए, उसे DB में भेजने के लिए सक्षम होना चाहिए।

इस तरह आपके पास SQL ​​स्ट्रिंग पीढ़ी नहीं है जो आपके ऐप में एक zillion ऑब्जेक्ट्स पर वितरित की गई है। रखरखाव को बहुत आसान बनाता है।


"सभी ऑब्जेक्ट XSLT में एक दूसरे को डेटा भेजते हैं," गंभीरता से?
गोरान

सेवा बस में संचार करने वाले सभी।
१०:१४

XSLT XML की सूचना को न ले जाने के लिए परिवर्तित करने की भाषा है। मुझे लगता है कि आप डेटा भेजने के लिए XSLT का उपयोग कर सकते हैं क्योंकि यह XML का सबसेट है लेकिन आप क्यों करना चाहेंगे?
गोरान

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