2010-11-15 13 views
18

में डेटा संस्करण लागू करने के लिए आप अपने विचारों को कैसे आप कैसेंड्रा में डेटा संस्करण लागू करेगा साझा कर सकते हैं।तरीके कैसेंड्रा

मान लीजिए कि मैं एक साधारण पता पुस्तिका में संस्करण रिकॉर्ड की जरूरत है। (पता पुस्तिका रिकॉर्ड कॉलमफैमिली में पंक्तियों के रूप में संग्रहीत हैं)। मैं उम्मीद करते हैं कि इतिहास:

  • बार बार उपयोग किया जाएगा
  • सभी को एक बार उपयोग किया जाएगा एक "टाइम मशीन" फैशन में पेश करने के लिए
  • वहाँ के लिए कुछ सौ से भी अधिक संस्करणों नहीं होगा एक रिकॉर्ड
  • इतिहास समाप्त नहीं होगी।

    • कन्वर्ट सुपर स्तंभ परिवार को पता पुस्तिका और एक पंक्ति keyed में सुपर स्तंभों के रूप में (समय स्टाम्प द्वारा) पता पुस्तिका रिकॉर्ड के कई संस्करण की दुकान:

    मैं निम्नलिखित दृष्टिकोण पर विचार कर रहा हूँ।

  • रिकॉर्ड के पुराने रिकॉर्ड या स्टोर करना नई सुपर स्तंभ परिवार बनाएँ। इस तरह की संरचना के रूप में विचार करेंगे इस प्रकार है:

    { 'पता पुस्तिका पंक्ति कुंजी': { 'समय stamp1': { 'पहला नाम': 'नया नाम', 'द्वारा संशोधित': 'उपयोगकर्ता आईडी' , },

    'time stamp2': { 
         'first name': 'new name', 
         'modified by': 'user id', 
        }, 
    }, 
    

    'एक और पता पुस्तिका पंक्ति कुंजी': { 'समय स्टाम्प': { .... नई कर्नल में संलग्न धारावाहिक (JSON) वस्तु के रूप में

  • संग्रह संस्करण umnFamilly। कॉलम के रूप में पंक्तियों और संस्करणों के रूप में संस्करण के सेट का प्रतिनिधित्व करना। (Simple Document Versioning with CouchDB के बाद मॉडलिंग की)

उत्तर

8

आप इस धारणा है कि किताबें आम तौर पर संबोधित उन में 10,000 से कम प्रविष्टियों है, तो एक सुपर स्तंभ परिवार में प्रति पता पुस्तिका समय रेखा एक पंक्ति का उपयोग कर एक सभ्य दृष्टिकोण होगा जोड़ सकते हैं।

एक पंक्ति लगेगा जैसे:

{'address_book_18f3a8': 
    {1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}}, 
    {1290636018401680: {'entry1': 'entry1_stuff_v2', ...}, 
    ... 
} 

जहां पंक्ति कुंजी पता पुस्तिका की पहचान करता है, प्रत्येक सुपर स्तंभ नाम एक समय स्टाम्प है, और subcolumns उस संस्करण के लिए पता पुस्तिका की सामग्री को प्रतिनिधित्व करते हैं।

यह आपको केवल एक प्रश्न के साथ एक एड्रेस बुक का नवीनतम संस्करण पढ़ने और एक एकल सम्मिलन के साथ एक नया संस्करण भी लिखने की अनुमति देगा।

अगर मैं 10,000 से कम तत्वों से कम पता हूं तो इसका उपयोग करने का कारण यह है कि जब आप एक उप-स्तंभ पढ़ते हैं तो सुपर कॉलम पूरी तरह से deserialized होना चाहिए। कुल मिलाकर, इस मामले में बुरा नहीं है, लेकिन यह ध्यान में रखना कुछ है।

{'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}} 

यहाँ, some_uuid1 और some_uuid2 के अनुरूप:

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

+0

यह इंगित करने के लिए धन्यवाद कि आपको हमेशा पूरे सुपरकॉलम को पढ़ने की आवश्यकता है। मैंने उस तथ्य को कैसंड्रा दस्तावेज़ों को पढ़ा नहीं है। –

1

एचबीएएस (http://hbase.apache.org/) में यह कार्यक्षमता निर्मित है। इसे आज़माएं।

+3

क्या आप hbase (http://hbase.apache.org/book/versions.html) में "संस्करण" का जिक्र कर रहे हैं? उस विशेषता के लिए वास्तविक दस्तावेज़ीकरण से लिंक करना उपयोगी होगा जिसमें आप संदर्भ दे रहे हैं। –

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