2015-05-27 11 views
5

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

मैंने फॉर्म की प्राथमिक कुंजी के साथ एक तालिका बनाई - (ए), बी, सी जहां विभाजन कुंजी है और बी, सी क्लस्टरिंग कुंजी हैं।

select * from tablename where b=val; 

परिणामों में:

इस क्वेरी के रूप में यह डेटा को छानने शामिल हो सकता है और इस तरह अप्रत्याशित प्रदर्शन हो सकता है नहीं चलाया जा सकता

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

और का उपयोग कर "फ़िल्टरिंग की अनुमति" मुझे हो जाता है जो मैं चाहता (भले ही मैं प्रदर्शन के लिए अपने बुरे सुना है) की अनुमति का उपयोग करें।

लेकिन जब मैं निम्न क्वेरी चलाएँ:

select * from tablename where c=val; 

इसे कहते हैं:

प्राथमिक कुंजी स्तंभ "सी" प्रतिबंधित नहीं किया जा सकता (पूर्ववर्ती स्तंभ "बी" है या तो प्रतिबंधित एक से है या नहीं गैर-ईक्यू संबंध)

और बिल्कुल "आवंटित फ़िल्टर" विकल्प नहीं है।

मेरा प्रश्न है - सभी क्लस्टरिंग कुंजियों का इलाज क्यों नहीं किया जाता है? कॉलम बी जो विभाजन कुंजी 'ए' के ​​समीप है, को 'फ़िल्टरिंग की अनुमति' का विकल्प दिया जाता है जो कॉलम 'सी' पर पूछताछ करते समय उस पर पूछताछ की अनुमति देता है (इस तालिका को जिस तरह से रखा गया है)।

आवंटित फ़िल्टर सभी एसएसटीबल्स के माध्यम से स्कैन करने के लिए कैसंड्रा प्राप्त करता है और विभाजन कुंजी गायब होने पर डेटा निकालता है, तो हम एक ही कॉलम सी क्यों नहीं कर सकते?

उत्तर

9

ऐसा नहीं है कि क्लस्टरिंग कुंजी का इलाज नहीं किया जाता है, यह है कि आप उन्हें छोड़ नहीं सकते हैं। ऐसा इसलिए है क्योंकि कैसंड्रा विभाजन के भीतर डिस्क प्रकार क्रम पर निर्धारित करने के लिए क्लस्टरिंग कुंजी का उपयोग करता है।

अपने उदाहरण में जोड़ने के लिए, PRIMARY KEY ((a),b,c,d) मान लें। आप b, या b और c निर्दिष्ट करके अपनी क्वेरी (सभी फ़िल्टरिंग के साथ) चला सकते हैं। लेकिन यह आपको c और d (b छोड़ना) या b और d (c छोड़कर) निर्दिष्ट करने की अनुमति नहीं देगा।

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

+1

धन्यवाद कि निश्चित रूप से कैसंड्रा कैसे काम करता है यह समझने में मदद करता है! – user3376961

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