2013-09-26 2 views
5

वर्तमान में, मेरे पास 100,000 से अधिक कहने के लिए डेटा की बड़ी पंक्तियों वाला एक कैसंड्रा कॉलम परिवार है। अब, मैं इस कॉलम परिवार में सभी डेटा को हटाना चाहता हूं और समस्या आई है:डेटा के बड़े बंडल को हटाने के बाद कैसंड्रा लुकअप क्वेरी काफी धीमी है

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

है यह समाधि का पत्थर सुविधा के कारण होता है, जबकि कैसेंड्रा डेटाबेस से डेटा हटा रहा है। अगली जीसी निकाल दिए जाने तक लुकअप की गति सामान्य तक ठीक नहीं होगी। Cassandra Distributed Deletes देखें।

क्योंकि इस तरह के क्वेरी ऑपरेशंस का उपयोग अक्सर मेरे सिस्टम में किया जाता है, मैं कुछ सेकंड तक विशाल विलंबता सहन नहीं कर सकता।

क्या आप कृपया मुझे इस समस्या का समाधान दें?

+0

शायद [टाइम श्रृंखला मॉडल] का उपयोग करें (https://academy.datastax.com/resources/getting-started-time-series-data-mode लिंग) एक अच्छा दृष्टिकोण हो सकता है? – deFreitas

उत्तर

3

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

मैं आपकी समस्या को हल करने के लिए कंपैक्शन (gets rid of all the tombstones it can detect) का उपयोग करने का सुझाव दूंगा, यह सीपीयू गहन है लेकिन प्रतिक्रियाओं के जवाब देने के लिए सेकंड के इंतजार से बेहतर है। gc_grace_seconds डिफ़ॉल्ट रूप से 10 दिनों के लिए सेट है तो आप शायद करना होगा,

./nodetool compact <ks_name> <cf_name> 

Ritchard के दृष्टिकोण एक अच्छा एक है: आप संकुचित करने के लिए चाहते हैं विशिष्ट ks & सीएफ उपलब्ध कराने के द्वारा कार्य कम आपकी मशीन पर गहन बना सकते हैं टॉम्बस्टोन से छुटकारा पाने के लिए कॉम्पैक्शन की अनुमति देने के लिए इसे ट्वीक करें।

+1

नोट करें कि कॉम्प्लेक्शन केवल तम्बू को हटा देगा जब gmb_grace_seconds को कबूतर डाला गया था। – Richard

+0

@ लुईबेन, मैं पूरे कॉलम परिवार को खाली नहीं कर सकता, क्योंकि 1000 से अधिक उपयोगकर्ता हैं जिनके डेटा इसमें संग्रहीत हैं, और उनमें से प्रत्येक डेटा की 100,000 से अधिक पंक्तियां हैं। प्रत्येक हटाना ऑपरेशन एक उपयोगकर्ता के डेटा पर निष्पादित किया जाता है। कॉलम परिवार पर ** कॉम्पैक्ट ** ऑपरेशन एक विकल्प हो सकता है, लेकिन ** इस ऑपरेशन को ट्रिगर करने का समय क्या है? ** यदि प्रत्येक उपयोगकर्ता कुछ डेटा हटा देता है तो यह हर बार ट्रिगर होता है, यह अन्य सभी उपयोगकर्ताओं को प्रभावित कर सकता है। इस पर आपका सुझाव क्या है? फिर से धन्यवाद! और _gc_grace_seconds_ को याद दिलाने के लिए रिचर्ड धन्यवाद। – Fify

0

@Fify

अपने कॉलम परिवार अक्सर है संशोधित (पढ़ने के बाद अपडेट तो अद्यतन फिर से पढ़ें ...), आप leveled compaction strategy

का उपयोग करना चाहिए नष्ट कर दिया स्तंभ निकाले quickier बनाने के , अपने कॉलम परिवार gc_grace_seconds

+0

आपके उत्तर के लिए धन्यवाद। 1) मेरे कॉलम परिवार के ज्यादातर इस्तेमाल किए गए ऑपरेशन _insertion_ हैं, और फिर _read_, _deletion_ कभी-कभी हुआ लेकिन बहुत कम संभावना के साथ (आइए 100 संचालन में से 1 कहें)।2) ** gc_grace_seconds ** बहुत छोटा नहीं हो सकता है क्योंकि डेटाबेस में संग्रहीत कई टीबी डेटा हैं। – Fify

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