स्तंभ-उन्मुख NoSQL दस्तावेज़-उन्मुख से कैसे भिन्न होता है?


89

NoSQL डेटाबेस के तीन प्रकार के बारे में मैंने पढ़ा है कुंजी-मूल्य, स्तंभ-उन्मुख, और दस्तावेज़-उन्मुख है।

की-वैल्यू बहुत स्ट्रेट फॉरवर्ड है - एक प्लेन वैल्यू।

मैंने मुख्य-मूल्य के रूप में वर्णित दस्तावेज़-उन्मुख डेटाबेस देखा है, लेकिन मूल्य JSON ऑब्जेक्ट की तरह एक संरचना हो सकता है। प्रत्येक "दस्तावेज़" में सभी, कुछ या कोई भी एक ही कुंजी के समान नहीं हो सकता है।

कॉलम ओरिएंटेड दस्तावेज़ उन्मुख की तरह बहुत लगता है कि आप एक संरचना निर्दिष्ट नहीं करते हैं।

तो इन दोनों में क्या अंतर है, और आप एक दूसरे का उपयोग क्यों करेंगे?

मैंने विशेष रूप से MongoDB और Cassandra को देखा है। मुझे मूल रूप से एक गतिशील संरचना की आवश्यकता है जो बदल सकती है, लेकिन अन्य मूल्यों को प्रभावित नहीं करती है। उसी समय मुझे विशिष्ट कुंजी को खोजने / फ़िल्टर करने और रिपोर्ट चलाने में सक्षम होने की आवश्यकता है। सीएपी के साथ, एपी मेरे लिए सबसे महत्वपूर्ण है। डेटा को "अंततः" नोड्स के पार सिंक किया जा सकता है, जब तक कि डेटा का कोई संघर्ष या नुकसान नहीं होता है। प्रत्येक उपयोगकर्ता को अपनी "टेबल" मिलेगी।

जवाबों:


41

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

कुछ मामलों में, आपके पास एक पंक्ति में बहुत बड़ी संख्या में कॉलम हो सकते हैं (जैसे किसी विशेष प्रकार के क्वेरी को सक्षम करने के लिए एक सूचकांक के रूप में कार्य करने के लिए)। कैसंड्रा ऐसी बड़ी संरचनाओं को कुशलता से संभाल सकता है, और आप विशिष्ट श्रेणी के कॉलम पुनः प्राप्त कर सकते हैं।

सुपर-कॉलम नामक संरचना का एक और स्तर है (आमतौर पर इस्तेमाल नहीं किया जाता है), जहां एक कॉलम में नेस्टेड (उप) कॉलम होते हैं।

आप नेस्टेड हैशटेबल / शब्दकोश के रूप में समग्र संरचना के बारे में सोच सकते हैं, कुंजी के 2 या 3 स्तरों के साथ।

सामान्य कॉलम परिवार:

row
    col  col  col ...
    val  val  val ...

सुपर कॉलम परिवार:

row
      supercol                      supercol                     ...
          (sub)col  (sub)col  ...       (sub)col  (sub)col  ...
           val       val      ...        val       val      ...

उच्च-स्तरीय संरचनाएं भी हैं - स्तंभ परिवार और कीस्पेस - जिनका उपयोग आपके डेटा को एक साथ विभाजित करने या समूह में करने के लिए किया जा सकता है।

इस प्रश्न को भी देखें: कैसेंड्रा: एक उप-रूप क्या है

या http://wiki.apache.org/cassandra/ArticlesAndPresentations से डेटा मॉडलिंग लिंक

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

कैसंड्रा स्तंभ मान बस बाइट्स हैं, लेकिन ASCII, UTF8 पाठ, संख्या, दिनांक आदि के रूप में टाइप किया जा सकता है।

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


5
एक स्तंभ परिवार एक तालिका की तरह है। एक पंक्ति एक तालिका पंक्ति की तरह है। कॉलम डेटाबेस स्तंभों की तरह होते हैं, सिवाय इसके कि उन्हें मक्खी पर परिभाषित किया जा सकता है, इसलिए आपके पास कुछ मामलों में बहुत कम आबादी वाली तालिका हो सकती है, या आपके पास प्रत्येक पंक्ति में अलग-अलग कॉलम आबादी हो सकते हैं।
डीएनए

1
यह डेटाबेस पर निर्भर करता है। MongoDB (दस्तावेज़-उन्मुख) में आप हर एक कुंजी को अपडेट कर सकते हैं।
डेविड राब

1
यदि यह सच है, तो मोंगोबीडी ने दस्तावेज़-उन्मुख डेटाबेस को कैसे परिभाषित किया है जबकि कैसंड्रा स्तंभ उन्मुख है। वे कैसे अलग हैं?
ल्यूक

3
@ ल्यूक कॉलम-ओरिएंटेड स्कीमा-लेस आरडीबीएमएस की तरह बहुत दिखता है, लेकिन इसकी ढीली संरचना के अलावा, मुख्य अंतर यह है कि यह संबंध नहीं है।
user327961

1
@ user327961 लेकिन MongoDB भी स्कीमा-कम RDBMS की तरह है, और यह भी संबंधपरक नहीं है।
ह्यूगी जूल 22'14

54

मुख्य अंतर यह है कि दस्तावेज़ स्टोर (जैसे MongoDB और CouchDB) मनमाने ढंग से जटिल दस्तावेज़ों की अनुमति देते हैं, यानी उप-अक्षरों के भीतर उप-दस्तावेज़, दस्तावेज़ों के साथ सूचियाँ आदि, जबकि स्तंभ स्टोर (जैसे कैसेंड्रा और HBase) केवल एक निश्चित प्रारूप की अनुमति देते हैं, जैसे कि सख्त एक-स्तरीय या दो-स्तरीय शब्दकोश।


इस मामले में, मोंगो (दस्तावेज) वह कर सकता है जो कैसेंद्र (कॉलम) कर सकता है। स्तंभ की आवश्यकता क्यों है?
संजय पटेल

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

29

"इन्सर्ट" में, rdbms शब्दों का उपयोग करने के लिए, दस्तावेज़-आधारित अधिक सुसंगत और सीधे फ़ॉवर्ड है। कैसेंड्रा की तुलना में नोट करें कि आप कोरम की धारणा के साथ निरंतरता प्राप्त करते हैं, लेकिन यह सभी कॉलम-आधारित प्रणालियों पर लागू नहीं होगा और यह लाभप्रदता को कम करता है। एक बार लिखने / पढ़ने-अक्सर भारी प्रणाली पर, MongoDB के लिए जाएं। इस पर भी विचार करें कि क्या आप हमेशा ऑब्जेक्ट की पूरी संरचना को पढ़ने की योजना बनाते हैं। एक दस्तावेज़-आधारित प्रणाली पूरे दस्तावेज़ को प्राप्त करने के लिए डिज़ाइन की गई है जब आप इसे प्राप्त करते हैं, और पूरी पंक्ति के कुछ हिस्सों को वापस करने के लिए बहुत मजबूत नहीं है।

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

यह भी विचार करें कि मोंगो डीबी सी ++ में लिखा गया है, और इसकी दूसरी बड़ी रिलीज पर है, जबकि कैसंड्रा को एक जेवीएम पर चलने की जरूरत है, और इसकी पहली बड़ी रिलीज कल से ही जारी होने वाले उम्मीदवार में है (लेकिन 0.X रिलीज प्रोडक्शंस में बदल गई प्रमुख कंपनी पहले से ही)।

दूसरी ओर, कैसंड्रा का डिज़ाइन आंशिक रूप से अमेज़ॅन डायनमो पर आधारित था, और यह एक उच्च लाभकारी समाधान होने के लिए इसके मूल में बनाया गया है, लेकिन इसका कॉलम-आधारित प्रारूप से कोई लेना-देना नहीं है। MongoDB भी बाहर निकलता है, लेकिन कैसंड्रा के रूप में सुंदर रूप में नहीं।


1
सी ++ बनाम जावा में लिखे जा रहे सॉफ्टवेयर के टुकड़े में क्या गलत है?
नायुकी

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

0

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

भ्रामक बिट यह है कि एक विस्तृत-स्तंभ "पंक्ति" को आसानी से एक दस्तावेज़ के रूप में दर्शाया जा सकता है, लेकिन, जैसा कि उल्लेख किया गया है कि वे अलग-अलग संग्रहीत हैं और विभिन्न प्रयोजनों के लिए अनुकूलित हैं।

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