2010-08-20 19 views
7

मेरे पास एक कैसंड्रा कॉलमफैमिली (0.6.4) है जो उपयोगकर्ताओं से नई प्रविष्टियां रखेगी। मैं उन नई प्रविष्टियों के लिए कैसंद्रा से पूछना चाहता हूं ताकि मैं उस डेटा को किसी अन्य सिस्टम में संसाधित कर सकूं।कैसंड्रा से तिथि सीमा

मेरी समझ यह थी कि मैं टाइम एयूआईडीटी टाइप को मेरी प्रविष्टि के लिए कुंजी के रूप में उपयोग कर सकता हूं, और उसके बाद एक कीरेंज पर पूछताछ जो स्टार्टकी के रूप में शुरू होती है, या जो भी आखिरी स्टार्टकी थी। क्या यह सही तरीका है?

get_range_slice वास्तव में एक सीमा कैसे बनाता है? क्या इसे कुंजी के डेटा प्रकार को नहीं जानना है? कहीं भी कुंजी के डेटा प्रकार की कोई घोषणा नहीं है। Storage_conf.xml फ़ाइल में, आप कॉलम के प्रकार की घोषणा करते हैं, लेकिन चाबियों की नहीं। क्या कुंजी कॉलम के समान ही मानी जाती है? या यह अनुमान लगाने के लिए कुछ जादू स्नीफिंग करता है?

मैंने संदर्भ कार्यान्वयन भी देखा है जहां लोग कॉलम में TimeUUIDType स्टोर करते हैं। हालांकि, ऐसा लगता है कि इस विशेष कुंजी तब "गर्म" हो जाएगी क्योंकि प्रत्येक बदलाव को इसे अपडेट करना होगा।

इस मामले में किसी भी पॉइंटर्स की सराहना की जाएगी।

उत्तर

2

डेटा को सॉर्ट करते समय केवल कॉलम-कुंजी महत्वपूर्ण हैं। संग्रहीत डेटा का कोई परिणाम नहीं है और न ही ऑटो-जनरेटेड टाइमस्टैम्प है। तुलना With विशेषता यहां महत्वपूर्ण है। यदि आप तुलनात्मक रूप से UTF8 टाइप टाइप करते हैं तो कुंजी को यूटीएफ 8 टाइप के रूप में व्याख्या किया जाएगा। यदि आप TimeWUIDType के रूप में तुलना With सेट करते हैं तो कुंजी स्वचालित रूप से टाइमस्टैम्प के रूप में व्याख्या की जाती है। आपको डेटा प्रकार निर्दिष्ट करने की आवश्यकता नहीं है। इस पृष्ठ पर स्लाइसप्रिडेट और स्लाइस रेंज परिभाषाओं को देखें http://wiki.apache.org/cassandra/API यह शुरू करने के लिए एक अच्छी जगह है। साथ ही, आपको यह आलेख उपयोगी हो सकता है http://www.sodeso.nl/?p=80 तीसरे भाग में या तो वह अपने प्रश्नों के साथ टुकड़ा के बारे में बात करता है और इसी तरह।

+0

मैं समझता हूं कि आप सॉर्टिंग के लिए कॉलम-कुंजी का उपयोग कर सकते हैं। हालांकि, अगर मैं अपने संग्रह में प्रत्येक आइटम के लिए टाइमस्टैम्प कॉलम लिखना चाहता था, तो मैं लगातार एक कॉलम परिवार को लिख रहा था, जो एक गर्म स्थान बनाएगा। – Doug

+0

मुझे आपकी टिप्पणी नहीं मिली है। क्या आप उस पर विस्तृत जानकारी दे सकते हैं? जहां तक ​​कॉलम-चाबियाँ चिंतित हैं, कैसंड्रा जैसे ही आप इसे स्टोर करते हैं, कुंजी (या 'कैसंद्रा सम्मेलन में' नाम ') के आधार पर पूरे कॉलम (सुपरकॉलम) को ऑटो-टाइप करता है। इसके अलावा, यदि आप अपने उपयोग के मामले में थोड़ा और विस्तार कर सकते हैं तो इससे मदद मिलेगी :) –

0

डौग,

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

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

0

कॉलम और की किसी भी प्रकार का हो सकता है, क्योंकि पंक्ति कुंजी केवल पहला कॉलम है। वस्तुतः, क्लस्टर एक गोलाकार हैश की अंगूठी है, और क्लस्टर के चारों ओर वितरित करने के लिए कुंजीपटल विभाजनकर्ता द्वारा धोया जाता है।

पंक्ति कुंजी के रूप में तिथियों का उपयोग करने से सावधान रहें, हालांकि डिफ़ॉल्ट यादृच्छिकता के यादृच्छिकता भी सीमित हैं और आप अपने डेटा को अव्यवस्थित कर सकते हैं।

और क्या है, अगर वह तिथि बदल रही है, तो आपको पिछली पंक्ति को हटाना होगा क्योंकि आप केवल सी * में सम्मिलित कर सकते हैं।

यहाँ हम क्या जानते है:

  • एक टुकड़ा रेंज एक शुरुआत के मूल्य और एक अंत मूल्य के साथ एक पंक्ति में स्तंभों की एक सीमा है, इस विस्तृत पंक्तियों के लिए ज्यादातर प्रयोग किया जाता है के रूप में स्तंभों का आदेश दिया गया है। सीएफ में परिभाषित ज्ञात कॉलम नाम अनुक्रमित हैं, इसलिए उन्हें नाम निर्दिष्ट करने के लिए पुनर्प्राप्त किया जा सकता है।
  • एक प्रमुख टुकड़ा, कटा हुआ स्तंभ श्रेणी के साथ जुड़े एक कुंजी के रूप कैसेंड्रा
  • एक के बराबर जहां खंड माध्यमिक अनुक्रमित का उपयोग करता है, तुम वहाँ असमानता ऑपरेटरों का उपयोग कर सकते तो कम से कम एक में खंड के बराबर होती है, लेकिन वहाँ होना चाहिए द्वारा दिया है आपका बयान (https://issues.apache.org/jira/browse/CASSANDRA-1599 भी देखें)।
  • एक कुंजी रेंज का उपयोग करना एक यादृच्छिक विभाजन के साथ अप्रभावी है क्योंकि आपकी कुंजी का MD5 हैश लेक्सिकल ऑर्डरिंग नहीं रखता है।

क्या आप उपयोग करना चाहते एक स्तंभ परिवार आधारित एक वाइड पंक्ति का उपयोग कर सूचकांक है: CompositeType | इस के लिए (TimeUUID UserID) आदेश में नहीं गर्म बनने के लिए, पहली बार एक सार्थक कुंजी ("ठीकरा कुंजी") जोड़ जो डेटा प्रकार या क्षेत्र जैसे डेटा नोड्स को विभाजित करेगा।

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

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