कैसंड्रा उच्च-कार्डिनलिटी कॉलम पर एक इंडेक्स बनाने के खिलाफ क्यों सिफारिश करता है?


10

कैसंड्रा प्रलेखन राज्यों,

इन स्थितियों में एक सूचकांक का उपयोग न करें:

  • उच्च-कार्डिनैलिटी कॉलम पर क्योंकि आप तब परिणामों की एक छोटी संख्या के लिए रिकॉर्ड की एक बड़ी मात्रा को क्वेरी करते हैं। नीचे एक उच्च-कार्डिनलिटी कॉलम इंडेक्स का उपयोग करके समस्याएं देखें।

यह जारी रहता है,

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

लेकिन कभी भी इस सवाल का जवाब नहीं देता: यह अक्षम क्यों है? मुझे नहीं पता कि "मैन्युअल रूप से तालिका को सूचकांक के रूप में बनाए रखने का क्या मतलब है"। लेकिन तब यह कुछ हद तक खुद के साथ विरोधाभास करता है "... कभी-कभी यह सुविधा के लिए सूचकांक का उपयोग करने के लिए ठीक है, जब तक कि क्वेरी की मात्रा मध्यम है ..."

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

लेकिन अगर मेरे पास एक संग्रह है जिसमें एक बज़िलियन आइटम है - दुर्लभ अवसर पर - एक अलग लेकिन लगभग अद्वितीय विशेषता द्वारा देखा जाना चाहिए ... यह एक उचित उपयोग है, है ना?

¹Every? IDK अगर प्रतिकृति का अर्थ है कि यह क्लस्टर के 1/3 को 3 के प्रतिकृति कारक के लिए हिट कर सकता है या नहीं?

जवाबों:


6

कैसंड्रा इंडेक्स ( यानी एक "सेकेंडरी इंडेक्स", प्राथमिक कुंजी के विपरीत) के साथ, प्रत्येक नोड को क्वेरी के जवाब के लिए अपने स्वयं के स्थानीय डेटा को क्वेरी करना होता है (कैसेंड्रा सेकेंडरी इंडेक्सेक्स एफएक्यू देखें )। ये इंडेक्स भी बैकग्राउंड प्रोसेस का इस्तेमाल करके बनाया गया है । इस पृष्ठभूमि का अर्थ है कि सूचकांक हिट के मामले में झूठी नकारात्मक वापसी कर सकता है (या यादों के मामले में झूठी सकारात्मक)।

इसका मतलब यह है कि एक उच्च-कार्डिनलिटी कॉलम में, उस कॉलम से परिवर्तन ( यानी परिवर्धन / विलोपन) की दर काफी अधिक हो सकती है। और इस प्रकार यदि परिवर्तन की दर पृष्ठभूमि प्रक्रिया के माध्यम से सूचकांक के अद्यतन से तेज है, तो एक सूचकांक "अक्षम" का उपयोग कर रहा है (सूचकांक आवेदन की तुलना में अधिक काम कर रहा है, जिसे अक्सर गलत उत्तर मिल सकता है) ।

एक और अधिक कुशल दृष्टिकोण, क्वेरी के मामले में सटीकता , एक दूसरे को बनाए रखने हो सकता है मेज , बल्कि एक माध्यमिक सूचकांक की तुलना में। अनुक्रमणिका के विपरीत टेबल्स, किसी अन्य तालिका की तरह ही व्यवहार किए जाते हैं। वे हैं अधिक अपने आवेदन क्वेरी परिणाम यह देने की संभावना की उम्मीद है । नकारात्मक पक्ष यह एक मेज को बनाए रखने रहे हैं कि एक सूचकांक के रूप में , एक कैसेंड्रा "माध्यमिक सूचकांक" बनाम, कर रहे हैं अब आवेदन की कमी ( यानी आपके आवेदन कोड अब है के लिए पता है कि "अनुक्रमणिका" तालिका से सम्मिलित करने के लिए / हटाने पंक्तियाँ, और दो तालिकाओं को एप्लिकेशन-स्तर "सुलह" के माध्यम से सिंक में रखने के लिए)।

उम्मीद है की यह मदद करेगा!


कि एक पृष्ठभूमि प्रक्रिया का उपयोग कर अनुक्रमित बनाया जाता है ... बदसूरत है। झूठी सकारात्मक उपयोगकर्ता को दिखाई देते हैं, मुझे लगता है? (मैं यह नहीं देखता कि वे कैसे नहीं होंगे।) अभी भी एक ही सवाल है, जिसमें आप कहते हैं, "इसका मतलब यह है कि उच्च-कार्डिनलिटी कॉलम में, उस कॉलम से परिवर्तन की दर (परिवर्धन / विलोपन) हो सकती है।" काफी ऊँचा हो। ” - मुझे लगता है कि बीजी इंडेक्स बिल्डिंग के संबंध में परिवर्तन की दर क्यों खराब होगी, लेकिन मैं अभी भी यह नहीं देखता कि उच्च-हृदयता का इससे क्या लेना-देना है। (निश्चित रूप से, यहां तक ​​कि एक कम-कार्डिनैलिटी कॉलम में भी उसी भाग्य को नुकसान होगा, नहीं!)
थानाटॉस

हां, कम-कार्डिनलिटी कॉलम समान भाग्य को नुकसान पहुंचाएगा। मेरी सोच वहां थोड़ी फजी थी, मैं मानता हूं। मैं यह मान रहा था कि एक उच्च कार्डिनैलिटी इंडेक्स में परिवर्तन की उच्च दर होने की संभावना होगी (इस प्रकार झूठे सकारात्मक / नकारात्मक परिणामों को प्रदर्शित करने की अधिक संभावना); यह परिवर्तन की दर (पृष्ठभूमि अनुक्रमण प्रक्रिया के सापेक्ष) है जो सबसे अधिक प्रासंगिक है, कार्डिनैलिटी नहीं।
कास्टाग्लिया

2

कुछ शब्दावली: जनक तालिका वह तालिका है जिस पर एक सूचकांक बनाया जाता है। द्वितीयक सूचकांक तालिका वह तालिका है जो किसी अन्य तालिका पर एक सूचकांक बनाए रखने के लिए बनाई गई है।

द्वितीयक सूचकांक तालिका का डेटा मूल नोड के डेटा के समान नोड पर संग्रहीत किया जाता है। कैसेंड्रा पार्टिशनर इंडेक्स टेबल डेटा को विभाजन और वितरित नहीं करता है। इसलिए यदि आप एक इंडेक्स कॉलम पर लुकअप करना चाहते हैं, तो सभी नोड्स को क्वेराइड किया जाता है, न कि केवल डेटा वाले प्रतिकृति नोड्स को। (को-ऑर्डिनेटर नोड को पता नहीं है कि डेटा कहां रहता है) https://www.datastax.com/dev/blog/cassandra-native-secondary-index-deep-dive

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.