2011-09-27 16 views
60

तीन प्रकार के नोएसक्यूएल डेटाबेस जिन्हें मैंने पढ़ा है वह महत्वपूर्ण मूल्य, कॉलम उन्मुख, और दस्तावेज़-उन्मुख है।कॉलम उन्मुख नोएसक्यूएल दस्तावेज़-उन्मुख से अलग कैसे है?

कुंजी-मूल्य बहुत सीधे आगे है - एक सादा मूल्य वाला एक कुंजी।

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

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

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

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

उत्तर

26

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

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

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

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

सामान्य स्तंभ परिवार:

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

सुपर स्तंभ परिवार:

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

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

भी देखें इस प्रश्न: से http://wiki.apache.org/cassandra/ArticlesAndPresentations

पुन Cassandra: What is a subcolumn

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

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

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

+0

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

+3

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

+1

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

18

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

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

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

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

33

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

संबंधित मुद्दे