2012-10-22 46 views
31

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

कैसंड्रा फाइल को कैसे संग्रहीत करता है, इसके बारे में मुझे पता है, यह * -Data.db फ़ाइल की सही स्थिति पर पहुंचने के लिए * -Index.db फ़ाइल का उपयोग करता है जहां यह ब्लूम फ़िल्टर, कॉलम अनुक्रमणिका संग्रहीत करता है और फिर आवश्यक पंक्ति के कॉलम।

मेरी राय में, यह कड़ाई से पंक्ति उन्मुख है। क्या मुझे कुछ याद आ रही है?

उत्तर

38

हां, "स्तंभ-उन्मुख" शब्दावली थोड़ा उलझन में है।

कैसंद्रा में मॉडल यह है कि पंक्तियों में कॉलम होते हैं। डेटा की छोटी इकाई (कॉलम) तक पहुंचने के लिए आपको पहले पंक्ति का नाम (कुंजी), फिर कॉलम नाम निर्दिष्ट करना होगा।

तो कॉलमफैमिली में Fruit नामक कॉलम में आपके पास निम्न उदाहरण (2 पंक्तियों के साथ) जैसी संरचना हो सकती है, जहां फल प्रकार पंक्ति कुंजी होते हैं, और कॉलम में प्रत्येक का नाम और मान होता है। एक मेज आधारित संबंधपरक डेटाबेस से

apple -> colour weight price variety 
     "red" 100  40 "Cox" 

orange -> colour weight price origin 
      "orange" 120  50  "Spain" 

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

हालांकि, "स्तंभ-उन्मुख" मॉडल का भी सूचियों और समय श्रृंखला के लिए उपयोग किया जा सकता है, जहां प्रत्येक कॉलम नाम अद्वितीय है (और यहां हमारे पास केवल एक पंक्ति है, लेकिन हमारे पास हजारों या लाखों कॉलम हो सकते हैं):

temperature -> 2012-09-01 2012-09-02 2012-09-03 ... 
       40   41   39   ... 

जो एक संबंधपरक मॉडल है, जहां एक rows नहीं columns के रूप में एक समय श्रृंखला की प्रविष्टियों मॉडल करने के लिए होता है से काफी अलग है।

+0

यह बिल्कुल सही बात है! यह पूरी तरह से अंतर बताता है। इस तरह, कैसंद्रा कॉलम उन्मुख हो सकता है, लेकिन यह आपके कॉलम नामों का उपयोग करने पर निर्भर करता है। इसे स्पष्ट करने के लिए धन्यवाद! – cesare

+0

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

6

आप दोनों अच्छे अंक बनाते हैं और यह भ्रमित हो सकता है। उदाहरण में

apple -> colour weight price variety 
     "red" 100  40 "Cox" 

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

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

apple -> colour weight price variety 
     "red" 100  40 "Cox" 

grape -> colour weight price variety 
     "red" 100  40 "Cox" 

हमारे पास दो अलग-अलग फल हैं, लेकिन दोनों में रंग = लाल है। यदि हम वजन, मूल्य और विविधता से अलग डिस्क पेज (ब्लॉक) में रंग संग्रहीत करते हैं तो संग्रहित एकमात्र चीज रंग है, फिर जब हम पृष्ठ को संपीड़ित करते हैं तो हम बहुत सारे डी-डुप्लिकेशन के कारण अत्यधिक संपीड़न प्राप्त कर सकते हैं। किसी पृष्ठ में 100 पंक्तियों (hypothetically) को संग्रहीत करने के बजाय, हम 10,000 रंग स्टोर कर सकते हैं।अब रंग लाल रंग के साथ सबकुछ पढ़ने के लिए यह हजारों आईओ के बजाय 1 आईओ हो सकता है जो गोदाम और विश्लेषण के लिए वास्तव में अच्छा है, लेकिन ओएलटीपी के लिए बुरा है अगर मुझे पूरी पंक्ति को अपडेट करने की आवश्यकता है क्योंकि पंक्ति में सैकड़ों कॉलम और एकल हो सकता है अद्यतन (या सम्मिलित) सैकड़ों आईओ की आवश्यकता हो सकती है।

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

लैरी

+0

मुझे लगता है कि बिंदु यह है कि कैसंड्रा कॉलम में डबल उपयोग हो सकता है। यह प्रत्येक पंक्ति के लिए कॉलम नाम और कॉलम मान द्वारा रचित जोड़े की क्रमबद्ध सूची के लिए स्टोर करता है। इसका मतलब है कि आप अपने कॉलम परिवार फल को फल नाम और कॉलम के साथ कुंजी बना सकते हैं। दूसरी तरफ, आप एक सीएफ fruit_cols भी परिभाषित कर सकते हैं, जिसमें रंगों और कॉलम के रूप में उस रंग के फल के नाम महत्वपूर्ण हैं। इस तरह वे एक ही पृष्ठ में संग्रहीत किया जाएगा। मुझे लगता है कि इसे स्तंभ स्तंभ माना जा सकता है। नहीं है? – cesare

24
  • आप Apache Cassandra git repo पर रीडमी फ़ाइल पर एक नज़र डालें, तो यह कहना है कि,

कैसेंड्रा विभाजित पंक्ति दुकान है। पंक्तियों को में आवश्यक प्राथमिक कुंजी के साथ व्यवस्थित किया जाता है।

विभाजन का अर्थ है कि कैसंद्रा आपके डेटा को एप्लिकेशन-पारदर्शी पदार्थ में एकाधिक मशीनों में वितरित कर सकता है। Cassandra स्वचालित रूप से पुन: विभाजन करेगा क्योंकि मशीनों को क्लस्टर से जोड़ा और हटा दिया गया है।

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

  • कॉलम उन्मुख या स्तंभ डेटाबेस बुद्धिमान डिस्क स्तंभ पर जमा हो जाती है।

    जैसे: टेबल Bonuses तालिका

    ID   Last First Bonus 
    1   Doe  John 8000 
    2   Smith Jane 4000 
    3   Beck Sam  1000 
    
  • एक पंक्ति-उन्मुख डेटाबेस प्रबंधन प्रणाली में, डेटा इस तरह संग्रहीत किया जाएगा: 1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;

  • एक कॉलम-ओरिएंटेड में डेटाबेस प्रबंधन प्रणाली, डेटा इस तरह संग्रहीत किया जाएगा:
    1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;

  • कैसेंड्रा मूल रूप से एक स्तंभ-परिवार दुकान

  • कैसेंड्रा के रूप में ऊपर डाटा स्टोर हैं, "Bounses" : { row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2 : { "ID":2, "Last":"Smith", "First":"Jane", "Bonus":4000} ... }
  • पढ़ें this अधिक जानकारी के लिए है।

उम्मीद है कि इससे मदद मिलती है।

+1

यह प्रयास –

+0

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

2

कॉलम परिवार का मतलब यह नहीं है कि यह स्तंभ-उन्मुख है। कैसंद्रा कॉलम परिवार है लेकिन स्तंभ-उन्मुख नहीं है। यह पंक्ति को अपने सभी कॉलम परिवारों के साथ एक साथ स्टोर करता है।

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