Database
 sql >> डेटाबेस >  >> RDS >> Database

FrankenQueries:जब SQL और NoSQL टकराते हैं

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

एक अन्य महत्वपूर्ण जानकारी SQL (या SQL- जैसे इंटरफेस) को लागू करने के लिए NoSQL डेटाबेस प्रदाताओं के बीच नया चलन है। एक उदाहरण हाल ही में CQL के साथ Cassandra का प्रचार या Hadoop पर आधारित अधिक परिपक्व SQL इंटरफ़ेस है।

जब दो दुनिया टकराती हैं

NoSQL के बारे में No SQL । मेरे लिए, इसका मतलब गैर-संबंधपरक डेटाबेस विकल्पों पर जोर देना है, जो डेटाबेस में विभिन्न इंटरफेस का भी पता लगा सकते हैं (और राजनीतिक शुद्धता की परवाह नहीं करते)। यह एक अच्छी बात है! व्यापार के लिए SQL की कमजोरी को आँख बंद करके स्वीकार करना? ठीक है, भले ही SQL आपके उत्पाद के लिए सही विकल्प है, फिर भी आपको परिणामों के बारे में सोचना होगा और यह सुनिश्चित करना होगा कि चीजें दोनों दुनियाओं के बीच अच्छी तरह से संरेखित हों। दूसरे शब्दों में, इसका अर्थ है "अंधा" भाग को हटाना और "लंगड़ा" को अपने डेवलपर्स के लिए स्वीकार्य न्यूनतम तक कम करना।

डेटा मॉडल

संबंध में आपके पास है:

<ब्लॉकक्वॉट>

RowSet -> SQL -> RowSet

रोसेट कुछ ऐसा है:

<ब्लॉकक्वॉट>

RowSet -> Item+
Item -> INT | VARCHAR n | ...

मैं आपको XPath डेटा मॉडल के बारे में बताऊंगा:

<ब्लॉकक्वॉट>

XDM -> XPath/XQuery -> XDM

और एक्सडीएम कुछ ऐसा ही है:

<ब्लॉकक्वॉट>

XDM -> Item+
Item -> AtomicType | Tree
AtomicType -> integer | string | ...
...

(दोनों सरल हैं, लेकिन एक उद्देश्य की पूर्ति करते हैं) ।

दस्तावेज़ के लिए डेटा मॉडल की एक विशिष्ट विशेषता यह है कि पेड़ समतल नहीं होते हैं:

<ब्लॉकक्वॉट>

{
"namespace": "person-2.0",
"comments": "This guy asked me for a dinosaur sticker. What a nutter!",
"person": {
"handle": "dscape",
"comments": "Please do not send unsolicited mail."
}
}

इस प्रकार, इसका क्या अर्थ हो सकता है, इसकी कई व्याख्याएं हैं:

<ब्लॉकक्वॉट>

SELECT comments from PERSON where handle = "dscape"

अनुरोध "टिप्पणी" के किस तत्व को संदर्भित करता है? यदि आप SQL / XML को देखते हैं, तो आपकी क्वेरी इस तरह दिखेगी:

<ब्लॉकक्वॉट>

SELECT XMLQuery('$person/comments')
FROM PERSON
WHERE XMLExists('$person/person/handle')

यह इस स्पष्ट निष्कर्ष की ओर जाता है:पेड़ों को नेविगेट करने के लिए एक तरीके की आवश्यकता होती है। एक्सएमएल में यह XPath है, JSON में यह JSONSelect हो सकता है, शायद कुछ और। लेकिन आपको अभी भी सबसे पहले मानक नेविगेशन पद्धति की आवश्यकता है।

इस कार्य को और भी दिलचस्प बनाता है संस्करण नियंत्रण और सर्किट विकास। इस तथ्य के बावजूद कि संबंधपरक दुनिया में इसे उम्र के लिए नजरअंदाज कर दिया गया है (तालिका परिवर्तन के इन अजीब क्षणों में डाउनटाइम के कारण व्यापार के लिए गंभीर परिणाम)। , यह वास्तव में दस्तावेजों के लिए नजरअंदाज नहीं किया जाना है। Microsoft Word के बारे में सोचें - वे दस्तावेज़ों के कितने भिन्न संस्करणों का समर्थन करते हैं? वर्ड 2003, 2005, आदि.

कोई स्कीमा नहीं, लचीलापन, असंरचित:अपना शब्द चुनें, लेकिन वे सभी डेटा स्वरूपों के तेजी से विकास के अधीन हैं। इस प्रश्न में, हम मानते हैं कि वर्णनकर्ता एक मानव बच्चा है और यह टिप्पणी कि मैं एक मूर्ख हूँ, पेड़ के सीधे वंशज हैं। यह निश्चित रूप से बदलेगा। और SQL दस्तावेज़ों के संस्करण का समर्थन नहीं करता है, इसलिए इसे काम करने के लिए आपको इसे विस्तारित करना होगा।

असंरचित डेटा के लिए वास्तविक क्वेरी भाषा को संस्करण को ध्यान में रखना चाहिए। XQuery में हम इस क्वेरी को कुछ इस तरह व्यक्त कर सकते हैं:

<ब्लॉकक्वॉट>

declare namespace p = "person-2.0" ;

for $person in collection('person')
let $comments-on-person := $person/p:comments
where $person/p:handle = "dscape"
return $comments-on-person

फ्रेंकनक्वेरीज, उदाहरण के लिए

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

आइए दो शॉपिंग सूचियां पेश करें, एक जो के लिए और एक मैरी के लिए।

<ब्लॉकक्वॉट>

marys-shopping.json
{"fruit": {
"apples": 2
}, "apples": 5 }

joes-shopping.json
{"fruit": {
"apples": 6,
"oranges": 1
} }

अब मेरे "काल्पनिक" SQL / JSON एक्सटेंशन के साथ, मैं करता हूं:

<ब्लॉकक्वॉट>

SELECT apples
FROM LISTS

यह क्या लौटाता है? याद रखें, रोसेट अंदर जाता है, रोसेट बाहर जाता है?

<ब्लॉकक्वॉट>

2, 5
---
6

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

एक बार फिर, यह कोई समस्या नहीं है यदि आप किसी ऐसी चीज़ का उपयोग करते हैं जो असंरचित जानकारी से संबंधित हो सकती है। आपको जावास्क्रिप्ट में यह समस्या नहीं है और निश्चित रूप से, यह XQuery में नहीं होगी। जावास्क्रिप्ट और XQuery दोनों में यह सब ऑर्गेनिक है।

निष्कर्ष:असंरचित डेटा, यूनिकॉर्न और पिक्सी डस्ट के लिए शानदार भाषाएं!

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

लेकिन मैं आपसे (डेवलपर्स) "लंगड़ा एसक्यूएल" वापस नहीं लेने के लिए कहता हूं। वह चली गई है, और आपके पास नोएसक्यूएल नामक एक नई हॉट डेट है। बस इसे कुछ समय दें और यह आप पर बढ़ेगा। डेटाबेस में काम करने वाले जावास्क्रिप्ट कोड को लिखना भी बहुत मजेदार है:उन्हें इसे अपने से दूर न जाने दें।

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

असंरचित जानकारी के लिए क्वेरी भाषा में क्या देखना है इसकी एक चेकलिस्ट यहां दी गई है:

  • नेविगेशन की भाषा
  • डेटा मॉडल
  • सामान्य भाव
  • लैम्ब्डा
  • उच्च क्रम के कार्य
  • कार्यात्मक सुगंध
  • अच्छी लाइन प्रोसेसिंग
  • मॉड्यूल ताकि आप अपनी खुद की लाइब्रेरी बना सकें
  • एप्लिकेशन सर्वर जागरूक है:इसमें ऐसे कार्य हैं जो REST की सेवा करते हैं

आप इस सलाह को अनदेखा कर सकते हैं, लेकिन अंत में, आप सिल्वरलाइट डेवलपर से निराश महसूस कर सकते हैं। और हम, जो लोग डेटाबेस में नवाचार करना पसंद करते हैं, वे निराश होंगे कि डेवलपर्स ने वापस जाने का फैसला किया!

SQL बनाम NoSQL समझाया गया


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेबल एक्सप्रेशन के फंडामेंटल, भाग 9 - व्युत्पन्न टेबल और सीटीई की तुलना में दृश्य

  2. SQL टेबल्स से डुप्लिकेट को हटाने के कई तरीके

  3. डेटा स्रोत को कॉन्फ़िगर किए बिना ODBC लिंक्ड सर्वर बनाना

  4. समस्या निवारण:बहुत अधिक रीडायरेक्ट

  5. 911/112:एक आपातकालीन कॉल सेवा डेटा मॉडल