मुझे संबंधपरक डेटाबेस के बजाय दस्तावेज़ आधारित डेटाबेस का उपयोग क्यों करना चाहिए?


188

मुझे संबंधपरक डेटाबेस का उपयोग करने के बजाय CouchDB जैसे दस्तावेज़ आधारित डेटाबेस का उपयोग क्यों करना चाहिए। क्या कोई विशिष्ट प्रकार के अनुप्रयोग या डोमेन हैं जहां दस्तावेज़ आधारित डेटाबेस रिलेशनल डेटाबेस से अधिक उपयुक्त है?


शायद एक दस्तावेज़-उन्मुख डेटाबेस "इकाई-विशेषता-मूल्य" (EAV) डेटाबेस के लिए कुछ मायनों में समान हो सकता है।
क्रिस डब्ल्यू

जवाबों:


167

संभवतः आपको :-)

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

मुझे व्यक्तिगत रूप से इस तथ्य से भी प्यार है कि मुझे एक HTTP क्लाइंट को छोड़कर, CouchDB के लिए किसी भी क्लाइंट लाइब्रेरी की आवश्यकता नहीं है, जो आजकल लगभग हर प्रोग्रामिंग भाषा में शामिल है।

शायद कम से कम स्पष्ट उत्तर: यदि आपको आरडीबीएमएस का उपयोग करके कोई दर्द महसूस नहीं होता है, तो उसके साथ रहें। यदि आपको अपना काम पूरा करने के लिए हमेशा अपने RDBMS के आसपास काम करना पड़ता है, तो एक दस्तावेज़ उन्मुख डेटाबेस देखने लायक हो सकता है।

एक अधिक विस्तृत सूची के लिए रिचर्ड जोन्स की इस पोस्टिंग की जाँच करें


1
मैंने दो साल के समय में किसी भी डेटाबेस स्कीमा को कभी नहीं देखा है जो हमने शुरू किए गए मूल स्कीमा से मिलता जुलता है ... इसलिए सब कुछ बराबर (जो यह नहीं है ...), आपको हमेशा एक स्कीमा डेटाबेस = एक दस्तावेज़-उन्मुख का उपयोग करना चाहिए; जो मुझे लगता है कि एक नहीं बल्कि भ्रामक नाम है ...
ᆼ ᆺ ᆼ

3
@ int3 यदि आप अपने डेटा को कॉलम के एक सेट के रूप में वर्णित नहीं कर सकते हैं, तो आपको उक्त डेटा पर बुद्धिमान क्वेरी कैसे लिखना चाहिए?
क्ले स्मिथ

46

CouchDB (उनकी वेबसाइट से )

  • एक दस्तावेज़ डेटाबेस सर्वर, एक RESTful JSON एपीआई के माध्यम से सुलभ। आमतौर पर, रिलेशनल डेटाबेस को केवल REST सेवाओं के माध्यम से एक्सेस नहीं किया जाता है, लेकिन इसके लिए बहुत अधिक जटिल SQL API की आवश्यकता होती है। अक्सर ये एपीआई (जेडीबीसी, ओडीबीसी, आदि) काफी जटिल होते हैं। REST काफी सरल है।

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

  • वितरित, द्वि-दिशात्मक संघर्ष का पता लगाने और प्रबंधन के साथ मजबूत, वृद्धिशील प्रतिकृति की विशेषता। कुछ SQL वाणिज्यिक उत्पाद इसकी पेशकश करते हैं। SQL API और फिक्स्ड स्कीमा के कारण, यह जटिल, कठिन और महंगा है। काउच के लिए, यह सरल और सस्ती प्रतीत होता है।

  • क्वेरी-सक्षम और इंडेक्स-सक्षम, तालिका उन्मुख रिपोर्टिंग इंजन की विशेषता है जो जावास्क्रिप्ट भाषा को क्वेरी भाषा के रूप में उपयोग करता है। तो SQL और संबंधपरक डेटाबेस करता है। यहां कुछ भी नया नहीं है।

इसलिए। CouchDB क्यों?

  • RD JDBC या ODBC की तुलना में सरल है।
  • स्कीमा की तुलना में कोई स्कीमा सरल नहीं है।
  • एक तरह से वितरित किया जाता है जो सरल और सस्ती दिखाई देता है।

12
जबकि मैं NoSQL डेटाबेस का एक बड़ा प्रशंसक हूं, पहला दावा (REST JDBC की तुलना में सरल है) बहुत संदिग्ध है।
18: ᆼ

2
REST प्रोटोकॉल मेरे लिए बहुत आसान लगता है, क्योंकि यह सिर्फ HTTP है: स्टेटलेस, कुछ विधियाँ, आदि, आदि शायद JDBC (हुड के नीचे) सरल है; यह आसान नहीं लगता है, केवल राज्य होने पर आधारित है।
S.Lott

5
@ S.Lott केवल CouchDb की ओर गियर के बजाय उत्तर "अधिक सामान्य" नहीं होना चाहिए?
पचेरियर

"नाजुक उन्नत योजना" बनाम क्या? मेरे अनुभव में विकल्प नो-प्लानिंग है जो स्पेगेटी डेटा संरचनाओं की ओर जाता है जो कि एक कगार पर संशोधित होते हैं।
तीजय कार्डन

26

मूर्खतापूर्ण भंडारण और अन्य सर्वर-डेटा की सेवा के लिए।

पिछले कुछ हफ्तों में मैं एक लाइफ़स्ट्रीम ऐप के साथ खेल रहा हूं, जो मेरे फीड्स (स्वादिष्ट, फ़्लिकर, जीथब, ट्विटर ...) को प्रदूषित करता है और उन्हें काउचडब में संग्रहीत करता है। काउचडब की सुंदरता यह है कि यह मुझे मूल डेटा को मूल संरचना में बिना किसी ओवरहेड के रखने देता है। मैंने स्रोत दस्तावेज़ को संग्रहीत करते हुए प्रत्येक दस्तावेज़ में एक 'क्लास' फ़ील्ड जोड़ा, और प्रत्येक स्रोत के लिए एक जावास्क्रिप्ट रेंडर क्लास लिखी।

सामान्यीकरण, जब भी आपका सर्वर किसी अन्य सर्वर के साथ एक स्कीमा-कम भंडारण के लिए संचार करता है, तो आपके पास स्कीमा पर कोई नियंत्रण नहीं होता है। एक बोनस के रूप में, couchdb सर्वर और क्लाइंट के मूल प्रोटोकॉल का उपयोग करता है - प्रतिनिधित्व के लिए JSON और परिवहन के लिए HTTP REST।


सिर्फ एक फ़ाइल, या प्रति फ़ीड फ़ाइल में उन्हें क्यों नहीं संग्रहीत करें?
j_random_hacker

6
क्योंकि couchdb भी आपको मानचित्र / कम का उपयोग करके दिलचस्प दृश्य बनाने देता है। उदाहरण के लिए, मैं डेटा स्रोत के आधार पर एक दृश्य बना सकता हूं, या मैं प्रत्येक स्रोत के लिए योगों की गणना कर सकता हूं।
डोंब

4
यह एक शानदार बिंदु है ... यदि आप डेटा का उपभोग कर रहे हैं और आपके पास इनबाउंड डेटा स्कीमा पर कोई नियंत्रण नहीं है - एक दस्तावेज़ स्टोर का उपयोग करें।
जोशुआ रॉबिन्सन

1
यह पहला सच समझाने वाला तर्क है जो मैंने NoSQL डेटाबेस के मूल्य के लिए सुना है
कालेब मैकनीविन

20

तेजी से अनुप्रयोग विकास का ख्याल आता है।

जब मैं अपने स्कीमा को लगातार विकसित कर रहा हूं, तो MySQL / SQLite में स्कीमा बनाए रखने के लिए लगातार निराश हो रहा हूं। जबकि मैंने अभी तक CouchDB के साथ बहुत अधिक नहीं किया है, मुझे यह पसंद है कि RAD प्रक्रिया के दौरान स्कीमा को विकसित करना कितना सरल है।

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


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

6

दस्तावेज़-आधारित डेटाबेस का उपयोग करें जब आपको प्रत्येक रिकॉर्ड के लिए समान आकार के फ़ील्ड के साथ तालिकाओं में डेटा संग्रहीत करने की आवश्यकता नहीं होती है। इसके बजाय, आपको प्रत्येक रिकॉर्ड को एक दस्तावेज के रूप में संग्रहीत करने की आवश्यकता है जिसमें कुछ विशेषताएं हैं। किसी भी लंबाई के किसी भी क्षेत्र को गतिशील रूप से पहले "तालिका को संशोधित" करने की आवश्यकता के बिना किसी भी समय दस्तावेज़ में जोड़ा जा सकता है। दस्तावेज़-आधारित फ़ील्ड में डेटा के कई टुकड़े हो सकते हैं।


1

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

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


0

दस्तावेज़ आधारित डेटाबेस का संबंधपरक डेटाबेस पर एक बड़ा लाभ है क्योंकि उन्हें किसी भी डेटा को दर्ज करने में सक्षम होने से पहले एक स्कीमा को परिभाषित करने की आवश्यकता नहीं होती है।

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

एक और लाभ वेब विकास में दस्तावेज़ आधारित डेटाबेस का उपयोग करने की सुगमता है। अधिक गहराई के लिए NoSQL डेटाबेस मॉडल कॉमरिसन इस स्रोत की जाँच करें: https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

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