2016-02-20 10 views
7

मैं cassandra के लिए नया हूँ और मैं एनालिटिक्स कार्यों के लिए इसका उपयोग कर रहा हूँ (अच्छा अनुक्रमण आवश्यक)।कैसेंड्रा - जहां गैर प्राथमिक कुंजी नुकसान के साथ खंड

मैंने इस पोस्ट (और अन्य) में पढ़ा है: cassandra, select via a non primary key कि मैं WHERE clause के साथ गैर-प्राथमिक कुंजी कॉलम के साथ अपने डीबी से क्वेरी नहीं कर सकता।

ऐसा करने के लिए, ऐसा लगता है कि वहाँ 3 संभावनाएं (सभी प्रमुख नुकसान के साथ):

  • एक माध्यमिक सूचकांक बनाएँ (प्रदर्शन के मुद्दों के लिए अनुशंसित नहीं)।
  • एक नई तालिका बनाएं (मुझे अनावश्यक डेटा नहीं चाहिए भले ही यह कैसंद्रा के साथ ठीक है)।
  • कॉलम को प्राथमिक कुंजी के भीतर क्वेरी करना चाहते हैं और इस मामले में मुझे अपने WHERE खंड में प्राथमिक कुंजी के सभी हिस्सों को परिभाषित करने की आवश्यकता है और मैं IN या = से अन्य ऑपरेटर का उपयोग नहीं कर सकता।

क्या ऊपर की 3 बाधाओं के बिना मैं क्या करने की कोशिश कर रहा हूं (WHERE clause गैर प्राथमिक कुंजी कॉलम के साथ)?

+0

कैसंद्रा वास्तव में उस उपयोग के मामले के लिए उपयुक्त नहीं है जिसका आप वर्णन कर रहे हैं। ऐसा लगता है कि आपको क्वेरी लचीलापन की आवश्यकता है, और आप बस इसे कैसंद्रा से नहीं निकाल पाएंगे। निचली पंक्ति, यह है कि क्वेरी टेबल (अनावश्यक डेटा के साथ) बनाने की सिफारिश *** एक स्केलेबल समाधान *** है; जबकि एक संबंधपरक डेटाबेस की तरह कैसंद्रा का उपयोग करने की कोशिश नहीं कर रहा है। – Aaron

+0

हाय @ एरॉन oups, समस्या यह है कि क्वेरी लचीलापन 'mongodb' के लिए 'cassandra' से अधिक की सिफारिश की जाती है, लेकिन' पढ़ने/लिखने 'प्रदर्शन के लिए (जो मेरे मामले में अत्यधिक महत्वपूर्ण है) और बाद में इस बिंदु में बहुत बुरा है। – farhawa

+0

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

उत्तर

4

से कैसेंड्रा के भीतर ही आप विकल्प है कि आप ऊपर निर्दिष्ट की है, सीमित हैं। आप जानना चाहते हैं क्यों एक नज़र यहाँ ले:

A Deep Look to the CQL Where Clause

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

+0

हाय @bechbd आपको धन्यवाद आप जवाब देते हैं। मेरे पास यहां एक इंडेक्सिंग समस्या है, स्पार्क बिना किसी बाधा के डेटा लोड करने में सक्षम कैसे हो सकता है जिसे मैंने abov का उल्लेख किया है? – farhawa

+1

आपको ऊपर दिए गए लिंक में मौजूद सीमाओं का उपयोग करके स्पार्क आरडीडी में डेटा लोड करना होगा। एक बार स्पार्क में आप तब फ़िल्टर का उपयोग कर सकते हैं, मानचित्र/कम करें, जो आप ढूंढ रहे हैं उसमें बड़ी मात्रा में डेटा फ़िल्टर करने के लिए रेंज करें। आपके अनुक्रमण प्रश्न का संक्षिप्त उत्तर यह है कि आप जो करने का प्रयास कर रहे हैं वह कैसंड्रा को आर्किटेक्टेड के मौलिक तरीकों का उल्लंघन करता है। AFAIK Cassandra 2.X में कोई रास्ता नहीं है कि आप इन सीमाओं के आसपास हो सकते हैं यदि आप कैसंड्रा 3.X का उपयोग कर रहे हैं तो आप भौतिक दृश्य का उपयोग कर देख सकते हैं, हालांकि वे अपनी जटिलताओं को पेश करते हैं। – bechbd

0

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

कैसेंड्रा आप CQL साथ क्या कर सकते के संबंध में कुछ प्रतिबंध लगाने से इस तरह के रैखिक स्केलिंग आदि के रूप में कई लाभ प्रदान करता।

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