क्या NoSQL के बारे में कुछ गंभीर है? [बन्द है]


46

मैं एक बहुत ही ठोस संबंधपरक डेटाबेस आदमी हूं और 3 जी सामान्य रूप में सभी तरह से समझता हूं, एसक्यूएल के बीजगणितीय सेट सिद्धांत जड़ों की सराहना करता हूं, और शायद एक टूटे हुए दिल (या नहीं) से संबंध बना सकता है।

मैंने अपनी पत्नी के साथ रात के लिए संबंधपरक डेटाबेस संरचना का पता नहीं लगाया है, लेकिन मैंने अपनी पत्नी के साथ रात के संबंध में रिलेशनल डेटाबेस परियोजनाओं के बारे में सोचा है।

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

क्या NoSQL डेटा संरचना के लिए एक सुपर शेल की तरह है? मेरे दिमाग में, डेटा को अंततः संरचना को पुनः प्राप्त करना होगा और पुनर्प्राप्ति को किसी प्रकार की भाषा में परिभाषित किया जाना चाहिए।


2
NoSQL डेटाबेस किस प्रकार की संरचना नहीं है? दस्तावेज़ डेटाबेस श्रेणीबद्ध हो सकते हैं, लेकिन अपने डेटा को उन दस्तावेज़ों में न्यूनतम रूप से संग्रहीत करते हैं जिनमें कुछ प्रारूप में डेटा होता है। ग्राफ़ डेटाबेस और की-वैल्यू स्टोर आत्म-व्याख्यात्मक हैं। क्या NoSQL डेटाबेस क्वेरी के लिए एक भाषा नहीं है? कुछ दस्तावेज़ डेटाबेस केवल दो उदाहरणों के रूप में XML के लिए पाठ्य खोज या XQuery हैं। SPARQL का उपयोग RDF स्टोर के लिए किया जाता है।
थॉमस ओवेन्स

2
"मैं अपनी पत्नी के साथ डेट नाइट्स पर रिलेशनल डेटाबेस प्रोजेक्ट्स के बारे में सोचता हूं" के लिए अपडेट करें :) :) LOL। अच्छा सवाल भी।
रॉकलैन

2
NoSQL डेटाबेस में संरचना नहीं है, लेकिन संरचना हमेशा संबंधपरक बीजगणित के लिए मैप करना आसान नहीं है। विभिन्न NoSQL विभिन्न संरचनाओं का उपयोग करता है, कुछ की-वैल्यू हैशमैप, पदानुक्रमित, ऑब्जेक्ट डेटाबेस, ग्राफ़ डेटाबेस या दस्तावेज़ स्टोर NoSQL के सामान्य प्रकार हैं। सभी कि NoSQL वास्तव में यह एहसास है कि SQL एक रामबाण नहीं है, कि कुछ समस्या डोमेन SQL / रिलेशनल बीजगणित के लिए खराब मैप करता है।
रेयान

7
NoSQL एक भ्रामक नाम है। इसका तात्पर्य ऐसे समूह से है जहां केवल सामान्य विशेषता ही क्लासिक रिलेशनल SQL डेटाबेस नहीं है। यह एक खुला सेट है। यह हर उस भोजन का वर्णन करने जैसा है जो "नॉन-ब्रेड के परिवार" के रूप में रोटी नहीं है।
पीटर बी

2
ठीक है क्या NoSQL के बारे में बड़ा उपद्रव है? यह आसान है: हमारे पास ऐसे लोगों की एक पीढ़ी थी जो संबंधपरक डेटाबेस के साथ बड़े हुए थे और उनके पास एकमात्र उपकरण था। क्योंकि अगर आपके पास केवल एक हथौड़ा है, तो सब कुछ एक कील बन जाता है। फिर आप बदसूरत सामान प्राप्त करते हैं जैसे कि किसी रिलेशनल डेटाबेस में ऑब्जेक्ट डालने की कोशिश करना या उसके ऊपर एक सर्च-इंजन बनाना। बड़ा अहसास यह था कि: एक SQL डेटाबेस बहुत सारी चीजों के लिए अच्छा है, लेकिन सब कुछ नहीं। "सब कुछ नहीं" बड़ी बात है।
पीटर बी

जवाबों:


24

NoSQL क्रांतिकारी से अधिक विकासवादी है। यह अनिवार्य रूप से "परिचित डेटा संरचनाओं का उपयोग करके" बाहरी डेटाबेस भंडारण "के मौजूदा विचारों को जोड़ती है, न कि रिलेशनल टेबल।"

संबंधपरक से अधिक प्रकार के डेटाबेस हैं, उदाहरण के लिए पदानुक्रमित डेटाबेस । आज के मानकों से पुरातन होते हुए, यह अपने डेटा के डेटा संरचनाओं (जैसे COBOL रिकॉर्ड) के साथ वास्तव में अच्छी तरह से मेल खाता है । बिंदु यह है कि डेटाबेस में डेटा को बारीकी से मॉडलिंग की गई थी कि प्रोग्रामिंग भाषाओं में रिकॉर्ड कैसे रखे गए थे जो उनका उपयोग करते थे।

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

इसने दो और प्रकार के डेटाबेस, ऑब्जेक्ट डेटाबेस और NoSQL को जन्म दिया ।

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

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

NoSQL को क्वेरी करने के लिए भाषाएँ हैं। हालाँकि, कोई सार्वभौमिक भाषा नहीं है जैसे कि SQL रिलेशनल डेटाबेस के लिए क्या है।


देर से संपादित करें:

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

लेखकों का कहना है कि संबंधपरक डेटाबेस अमेज़न और Google जैसी साइटों के लिए आवश्यक डेटा की सेवा करने में सक्षम समूहों के लिए अच्छी तरह से पैमाने पर नहीं हैं: NoSQL इस आला को फिट करने के लिए विकसित किया गया था, एसीआईडी ​​में संक्षिप्तता और स्थायित्व को आराम करने के लिए बड़ी संख्या में प्रश्नों को सर्वर करने के लिए बड़े पैमाने पर स्थैतिक डेटा का उपयोग करें (इसलिए, ACID लेनदेन उतना महत्वपूर्ण नहीं है)।

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

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


2
कुछ NoSQL डेटाबेस एक क्वेरी भाषा है। यदि डेटा XML या RDF में संग्रहीत है, तो मैंने पहले XQuery और SPARQL का उपयोग किया है। उन भाषाओं की संरचना और क्वेरी के लिए होती है। लेकिन फिर से, यह केवल NoSQL डेटाबेस को कवर करता है जिसमें अच्छी तरह से परिभाषित डेटा प्रारूप होते हैं और पाठ या कुंजी-मूल्य वाले जोड़े के लिए बहुत कुछ नहीं करते हैं।
थॉमस ओवेन्स

@ThomasOwens मैंने अपने उत्तर को अधिक विशिष्ट होने के लिए संपादित किया।

1
यह NoSQL का एक दिलचस्प अवलोकन है, लेकिन वास्तव में वास्तविक प्रश्न का उत्तर नहीं देता है। जहां तक ​​मैं NoSQL के बारे में एकमात्र बात "ग्राउंडब्रेकिंग" बता सकता हूं कि आपके डेटा को संग्रहीत करने से पहले एक विशिष्ट संरचना के अनुरूप होने की आवश्यकता नहीं है।
रॉकलान

2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...मुझे लग रहा है कि यह कार्ट को बहुत सारे मामलों में घोड़े से पहले डाल रहा है। बड़े डेटा सेट के साथ बड़े व्यवसायों के लिए, डेटा अविश्वसनीय रूप से मूल्यवान है और वर्तमान गर्म प्रोग्रामिंग भाषाओं, टूल और प्रतिमानों की तुलना में बहुत लंबे, बहुत लंबे समय तक लगभग रहेगा। यह कहना अधिक सटीक हो सकता है कि OOP डेटाबेस डिज़ाइन के लिए एक बाधा है, और प्रोग्रामिंग प्रतिमान को फिट करने के लिए डेटाबेस डिज़ाइन को बदलने की कोशिश करना सबसे अच्छा विचार नहीं हो सकता है।
डोभाल

2
मैं अभी यह बताता हूं कि हम सभी एक वारिसिकल डेटाबेस कार्यान्वयन का उपयोग कर रहे हैं जो अभी भी बहुत भारी है - इसे फाइलसिस्टम कहा जाता है।
वायट बार्नेट

13

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

दिलचस्प अंतर के जोड़े, मेरी राय से, निम्नलिखित हैं: क्रॉस-टाइप निर्भरता (एसक्यूएल में एफके) की दिशा एसक्यूएल और नोएसक्यूएल में विपरीत हैं और संग्रह प्रकार नोएसक्यूएल में सेट करने के लिए सीमित नहीं है (और इसलिए कुछ सेट-सैद्धांतिक संचालन अब NoSQL दुनिया में लागू नहीं हो सकता है, लेकिन कुछ अन्य अभी भी मान्य हैं)। फिर भी लेख से एक और दिलचस्प बात यह है कि SQL और NoSQL दोनों डेटाबेस को क्वेरी करने के लिए प्रस्तावित एकल क्वेरी भाषा है। इसे LINQ कहा जाता है, और यदि आपको लगता है कि आपने यह नाम पहले सुना होगा, तो आप सही हैं: यह Microsoft की क्वेरी भाषा C # से है।


1
"फिर भी लेख से एक और दिलचस्प बात यह है कि SQL और NoSQL दोनों डेटाबेस को क्वेरी करने के लिए प्रस्तावित एकल क्वेरी भाषा है। इसे LINQ कहा जाता है", पूरी तरह से सच नहीं है, 'Linq' 1: 1 फैशन में SQL के लिए अनुपयुक्त नहीं है, इसलिए अनुवाद यह SQL DBs पर काम करने के लिए होने के लिए है। जब तक किसी चीज को दोनों को क्वेरी करने के लिए पेश किया जा सकता है, जब तक कि अनुवाद की परत यह सुनिश्चित करती है कि यह लक्ष्य DB पर चलता है
फ्रैंस बोमा

6
ठीक है, एक तर्क दे सकता है कि एसक्यूएल भी सीधे डेटाबेस पर निष्पादित नहीं होता है। जो निष्पादित किया जाता है वह एक निष्पादन योजना है, और कोई यह भी तर्क दे सकता है कि लिनक को सीधे निष्पादन योजना में अनुवाद किया जा सकता है। तो कोई बड़ा अंतर नहीं है।
हसप्यूमुलेटर

10

स्नोमैन का जवाब सही ढंग से बताता है कि SQL और NoSQL उनके डेटा संरचनाओं में कैसे भिन्न हैं और ये कैसे एक्सेस किए जाते हैं। हालाँकि, एक और भी अधिक महत्वपूर्ण अंतर उनके संबंधित समस्या डोमेन है।

NoSQL SQL का उत्तराधिकारी नहीं है। बल्कि, NoSQL की विभिन्न शाखाएँ एसक्यूएल के कुछ गुणों का त्याग करती हैं ताकि दूसरों पर बेहतर हो सकेCAP प्रमेय बताता है कि किसी भी वितरित डेटाबेस प्रणाली के लिए निम्नलिखित सभी गुणों को संतुष्ट करना असंभव है:

  • संगति
  • उपलब्धता
  • विभाजन सहिष्णुता

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

यह केवल एक उदाहरण है, जैसा कि NoSQL एक विविध क्षेत्र है, और इसके वेरिएंट CAP त्रिकोण के भीतर मापदंडों के सभी संभावित संयोजन को बहुत अधिक कवर करते हैं


मैं इलास्टिकसर्च से परिचित नहीं हूं। एक त्वरित Google खोज यह दिखाती है कि यह स्थिरता (C) का त्याग करती है, और इसलिए AP है, CAP नहीं, जो सैद्धांतिक रूप से असंभव है। संपादित करें: यह अब की गई टिप्पणी के जवाब में था जिसमें कहा गया था कि ElasticSearch सभी CAP गुणों को पूरा करता है।
फ्लोरियन वॉन स्टोसच

3
ओह कितना प्यारा, वे ACID का मुकाबला करने के लिए BASE के साथ गए। क्या REDOX या SALT नामक एक मध्य-ग्राउंड दृष्टिकोण है?
पैट्रिक एम

3

NoSQL के सामान्य उपयोग के मामले आम SQL- आधारित डेटाबेस की तुलना में उनके उत्पादकता लाभ में बढ़ रहे हैं। इसमें कई कारक हैं।

एक हाउसकीपिंग है। अधिकांश NoSQLs खुले स्रोत हैं और कुछ आदेशों के साथ वर्कस्टेशन या वीएम पर स्थापित किए जा सकते हैं, और बॉक्स से बाहर उचित चूक के साथ काम कर सकते हैं। मेरे अनुभव में, यहां तक ​​कि Postgres और MySQL भी ऐसा नहीं है; विकास के उद्देश्यों के लिए वर्कस्टेशन पर भी शुरू करने के लिए कॉन्फ़िगरेशन आमतौर पर आवश्यक है।

एक और सुविधाजनक विकास है, जैसा कि अन्य उत्तरों में विस्तार से वर्णित है। मानस के JSON इंडेक्सिंग क्षमताओं, या रेडिस और रिआक के प्रमुख / मूल्य शब्दार्थ, कुछ निश्चित वेबएप हो सकते हैं जिन्हें काम करने की आवश्यकता है, और एपीआई आसान हैं। कुछ NoSQL अपने स्वयं के RESTful API प्रदान करते हैं, जबकि SQL के साथ आपको आमतौर पर उन्हें स्वयं लिखना होता है।

ये कारक छोटे पैमाने पर परियोजनाओं के लिए NoSQL डेटाबेस को आकर्षक बनाते हैं। पिक-अप का समय कम हो जाता है। यकीन है, जब आप उत्पादन के लिए जाते हैं तो आपको सुरक्षा और पैमाने के लिए कॉन्फ़िगर करना पड़ता है, लेकिन कोडिंग शुरू करने और जल्दी से सहयोग करने की क्षमता शक्तिशाली होती है और, मैं तर्क देता हूं, ग्राउंडब्रेकिंग।

इसके अलावा, छोटे पैमाने पर अनुप्रयोगों (जैसे कंपनी-आंतरिक या ऐप-टू-ऐप सेवाओं) के लिए उपरोक्त, एक टीम अपनी डीबीए टीमों को शामिल किए बिना, और प्रदर्शन या अखंडता को प्रभावित किए बिना एक उत्पादन NoSQL डेटाबेस को खड़ा करने में सक्षम हो सकती है। नतीजतन मुद्दे। पेशेवर डीबीए इसे पसंद नहीं कर सकते हैं, लेकिन डेवलपर्स जो डीबीए को बाधा (सही या गलत) के स्रोत के रूप में देखते हैं, कभी-कभी NoSQL को उनसे निपटने के लिए बाईपास करने के तरीके के रूप में देखते हैं। मैं इस बात को स्वीकार करता हूं - मैंने एक बार पोस्टग्रेज से SQLite में प्रतिकूल DBA को काटने के लिए एक छोटे पैमाने पर एप्लिकेशन को बदल दिया था, और मैंने DBA अनुमोदन प्रक्रियाओं और एक्सेस प्रतिबंधों से बचने के लिए Oracle के बजाय Mongo पर लागू करने के लिए चुना है। किसी भी मामले में कोई प्रतिकूल परिणाम नहीं है।

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