2012-01-18 10 views
7

तो मैं कैसेंड्रा शोध किया गया था और वास्तुकला का एक समझ पाने के लिए कोशिश कर रहा है, और मैं विकि से निम्न पृष्ठों पर पढ़ रहा था: http://wiki.apache.org/cassandra/MemtableSSTableकैसेंड्रा SSTables और संघनन

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

अब मेरे पास कंपैक्शन के बारे में कुछ प्रश्न हैं। सबसे पहले, यह ऑपरेशन कितना महंगा है? अगर हमारे पास डिस्क पर दो एसएसटीबल्स होने पर एक compaction की मांग की जाती है, तो क्या यह निषिद्ध होगा, या जब मैं उपयोग के समय रात के मध्य तक इंतजार कर रहा हूं तो बेहतर सेवा होगी? क्या मेरे पास कुछ बेहतर है (लेकिन छोटे) एसएसटीबल्स बनाम कुछ लेकिन बहुत बड़े एसएसटीबल्स हैं? क्या बहुत सारे गैर-कॉम्पैक्ट किए गए एसएसटीबल्स पढ़ने के प्रदर्शन को प्रभावित करते हैं? इस बारे में समेकन कैसे काम करता है: क्या होगा अगर मैं इन एसएसटीबल्स से पढ़ रहा हूं, तो कोई ऐसा सम्मिलित करता है जो डिस्क पर एक नया Memtable फ़्लश करता है, जो बदले में एक compaction का कारण बनता है?

कोई भी जानकारी और अनुभव जो आप इस बारे में प्रदान कर सकते हैं वह बहुत अच्छा होगा!

उत्तर

12

प्रत्येक सवाल का जवाब देने की कोशिश कर रहा: सबसे पहले

, इस आपरेशन कैसे महंगा है?

एक संघनन SSTables यह संकुचित हो रहा है में सब कुछ कॉपी करने के लिए है (tombstones से घटा कर annihilations या अधिलेखित करता है)। हालांकि यह पहले की तुलना में कम महंगा है, क्योंकि कॉम्पैक्शन पूरी तरह अनुक्रमिक आईओ का उपयोग करता है, जो कताई डिस्क पर अच्छा और तेज़ है।

यदि हमारे पास डिस्क पर दो एसएसटीबल्स होने पर एक compaction की मांग की जाती है, तो यह निषिद्ध होगा, या जब मैं उपयोग कम हो जाता हूं, तो रात के मध्य तक इंतजार करना बेहतर होगा?

इसका मतलब यह होगा कि आपके लेखन में काफी महंगा होगा; कल्पना करें कि प्रत्येक लेखन एक नया एसएसटीबल का कारण बनता है; इसलिए प्रत्येक लेखन को कॉम्पैक्ट करना होगा, जो सभी लिखते हैं जो इससे पहले आए हैं। एन आइटम लिखने की लागत एन^2 होगी।

एक बेहतर विचार एक कॉम्पैक्शन रणनीति को अपनाने वाला है जैसे कि एक्यूनु के डबलिंग ऐरे द्वारा उपयोग किया जाता है: प्रत्येक एसएसटीबल (उर्फ सरणी) को "स्तर" में स्टोर करें और जब भी स्तर में दो एरे होते हैं तो उन्हें कॉम्पैक्ट करें, आउटपुट सरणी को बढ़ावा देना अगला स्तर। यह ओ (लॉग एन)/बी) अनुक्रमिक आईओ प्रति लिखने के लिए दिखाया जा सकता है, जबकि ओ (लॉग एन) को सरणी की संख्या सीमित कर रहा है।

यह योजना कैसंड्रा के लिए एक (ओपन-सोर्स) स्टोरेज इंजन कैसल में लागू की गई है।अधिक जानकारी के लिए यहाँ देखें:

नायब मैं Acunu

के लिए काम

संघनन अगर मैं एकाधिक (पर छोटे) SSTables होने बनाम है किसी भी बेहतर है कुछ लेकिन बहुत बड़े एसएसटीबल्स?

छोटे एसएसटीबल्स के साथ कॉम्पैक्शन में कम समय लगेगा, लेकिन आपको उनमें से अधिक करना होगा। इसके घोड़ों के लिए पाठ्यक्रम, वास्तव में। SSTable गिनती & आकार को पढ़ने के प्रदर्शन को प्रभावित करता है, लेकिन (अगला प्रश्न देखें)

गैर जमा SSTables का एक बहुत प्रभावित प्रदर्शन को पढ़ने के लिए होने करता है?

के लिए बिंदु पढ़ता है, बहुत ज्यादा नहीं: कैसेंड्रा (और कैसल) SSTables में देख जब यह पता कुंजी वहाँ नहीं होगा से बचने के लिए खिलने फिल्टर है, और जल्दी समाप्त जब यह सही मूल्य पाता है सकते हैं (मूल्यों और एसएसटीबल पर टाइमस्टैम्प का उपयोग करके)।

हालांकि, get_slice प्रश्नों के साथ, आप जल्दी बंद नहीं कर सकते, तो आप हर SSTable कि संभवतः अपने पंक्ति में एक मूल्य हो सकता है यात्रा करने के लिए होगा - इसलिए यदि आप बहुत सारे हैं, तो अपने get_slices धीमी हो जाएगा।

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

हजारों एसएसटीबल्स के साथ और अधिक, ब्लूम फ़िल्टर झूठी सकारात्मक दर (~ 1%) चोट लगने लगेगी, क्योंकि प्रत्येक रूप में आपको एसएसटीबल्स के 10 एस में देखना होगा जिसमें मूल्य नहीं है!

कैसे इस के साथ संगामिति काम: मैं इन SSTables से क्या हुआ अगर पढ़ रहा हूँ, तो किसी को करता है एक डालने जो डिस्क के लिए एक नया Memtable, जो बारी में एक संघनन का कारण बनता है flushes?

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

धन्यवाद

टॉम

+0

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

+0

> जब आप कहते हैं "कल्पना करें कि प्रत्येक लेखन एक नया एसएसटीबल बनाता है" तो आप काल्पनिक परिस्थिति में आपका मतलब है कि आपके पास बहुत बड़ा लेखन है, सही? मैं गणित को सरल बनाने के लिए बस ऐसा करता हूं। हकीकत में आपके पास कुछ नया बैच (बी) लिखता है जो एक नया एसएसटीबल बनाता है, लेकिन मुझे लगता है कि यह एन लिखने के लिए ओ (एन^2/बी), या प्रत्येक लिखने के लिए ओ (एन/बी) के रूप में आता है (जो है ओ ((लॉग एन)/बी) की तुलना में वास्तव में काफी बड़ा है, –

+0

> दूसरा, क्या आप स्पष्टीकरण दे सकते हैं कि एसएसटीबल्स गायब होने के बारे में चिंता करने की आवश्यकता क्यों नहीं है? कैसल में हम संदर्भ प्रत्येक एसएसटीबल की गणना करते हैं; पढ़ने की शुरुआत में ऑपरेशन, हम प्रत्येक एसएसटीबल पर संदर्भ गणना करते हैं, उन्हें दूर जाने से रोकने के लिए। जब ​​संदर्भ गणना शून्य हो जाती है (या तो मर्ज के परिणाम के रूप में या जब कोई पढ़ा जाता है) तालिका वास्तव में हटा दी जाती है। हमारे पास भी है यह तेजी से बनाने के लिए कुछ चालें। मुझे लगता है कि कैसंद्रा कुछ समान करता है, जहां कचरा कलेक्टर का उपयोग करके। –

3

मैं कैसेंड्रा 1.0 यहाँ द्वारा समर्थित विभिन्न संघनन रणनीतियों के बारे में लिखा है: http://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra

tldr: समतल संघनन संकुचित के बारे में और अधिक आक्रामक है और इस तरह एक बहुत कुछ के साथ वर्कलोड के लिए सिफारिश की है पढ़ता है

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