अपाचे इग्नाइट में डेटा संपीड़न। सबर का अनुभव

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

इसलिए, पर्सिस्टेंस मोड सक्षम होने पर, कैश में डेटा में बदलाव के परिणामस्वरूप, इग्नाइट डिस्क पर लिखना शुरू कर देता है:

  1. कैश की सामग्री
  2. आगे लॉग लिखें (इसके बाद केवल वाल)

पिछले कुछ समय से वाल संपीड़न के लिए एक तंत्र मौजूद है, जिसे वाल संघनन कहा जाता है। हाल ही में जारी अपाचे इग्नाइट 2.8 ने दो और तंत्र पेश किए हैं जो आपको डिस्क पर डेटा को संपीड़ित करने की अनुमति देते हैं: कैश की सामग्री को संपीड़ित करने के लिए डिस्क पेज संपीड़न और कुछ वाल प्रविष्टियों को संपीड़ित करने के लिए वाल पेज स्नैपशॉट संपीड़न। इन तीनों तंत्रों के बारे में अधिक विवरण नीचे दिया गया है।

डिस्क पृष्ठ संपीड़न

Как это работает

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

डेटा को निम्न रूप में डिस्क पर संग्रहीत किया जाता है: प्रत्येक कैश समूह के प्रत्येक विभाजन के लिए एक अलग फ़ाइल बनाई जाती है; इस फ़ाइल में, पृष्ठ आरोही सूचकांक क्रम में एक के बाद एक दिखाई देते हैं। पूर्ण पृष्ठ पहचानकर्ता में फ़ाइल में कैश समूह पहचानकर्ता, विभाजन संख्या और पृष्ठ अनुक्रमणिका शामिल होती है। इस प्रकार, पूर्ण पृष्ठ पहचानकर्ता का उपयोग करके, हम प्रत्येक पृष्ठ के लिए फ़ाइल और फ़ाइल में ऑफसेट को विशिष्ट रूप से निर्धारित कर सकते हैं। आप अपाचे इग्नाइट विकी लेख में पेजिंग मेमोरी के बारे में अधिक पढ़ सकते हैं: इग्नाइट परसिस्टेंट स्टोर - हुड के नीचे.

डिस्क पृष्ठ संपीड़न तंत्र, जैसा कि आप नाम से अनुमान लगा सकते हैं, पृष्ठ स्तर पर काम करता है। जब यह तंत्र सक्षम होता है, तो रैम में डेटा को बिना किसी संपीड़न के संसाधित किया जाता है, लेकिन जब पेज रैम से डिस्क पर सहेजे जाते हैं, तो वे संपीड़ित होते हैं।

लेकिन प्रत्येक पृष्ठ को अलग-अलग संपीड़ित करना समस्या का समाधान नहीं है; आपको परिणामी डेटा फ़ाइलों के आकार को किसी तरह कम करने की आवश्यकता है। यदि पेज का आकार अब तय नहीं है, तो हम फ़ाइल में एक के बाद एक पेज नहीं लिख सकते, क्योंकि इससे कई समस्याएं पैदा हो सकती हैं:

  • पेज इंडेक्स का उपयोग करके, हम उस ऑफ़सेट की गणना नहीं कर पाएंगे जिसके द्वारा यह फ़ाइल में स्थित है।
  • यह स्पष्ट नहीं है कि उन पृष्ठों का क्या किया जाए जो फ़ाइल के अंत में नहीं हैं और उनका आकार बदल दिया जाए। यदि पृष्ठ का आकार घट जाता है, तो उसके द्वारा खाली किया गया स्थान गायब हो जाता है। यदि पृष्ठ का आकार बढ़ता है, तो आपको इसके लिए फ़ाइल में एक नई जगह ढूंढनी होगी।
  • यदि कोई पृष्ठ कई बाइट्स से चलता है जो फ़ाइल सिस्टम ब्लॉक आकार का एक गुणक नहीं है, तो इसे पढ़ने या लिखने के लिए एक और फ़ाइल सिस्टम ब्लॉक को छूने की आवश्यकता होगी, जिससे प्रदर्शन में गिरावट हो सकती है।

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

यह तर्कसंगत है कि फ़ाइल सिस्टम ब्लॉक को मुक्त करने के लिए, छेद का आकार फ़ाइल सिस्टम ब्लॉक से बड़ा या उसके बराबर होना चाहिए, जो पृष्ठ आकार और अपाचे इग्नाइट पर एक अतिरिक्त सीमा लगाता है: संपीड़न के लिए कोई प्रभाव पड़ता है, पृष्ठ का आकार फ़ाइल सिस्टम ब्लॉक के आकार से बिल्कुल बड़ा होना चाहिए। यदि पृष्ठ का आकार ब्लॉक आकार के बराबर है, तो हम कभी भी एक ब्लॉक को मुक्त नहीं कर पाएंगे, क्योंकि एक ब्लॉक को मुक्त करने के लिए, संपीड़ित पृष्ठ को 0 बाइट्स पर कब्जा करना होगा। यदि पृष्ठ का आकार 2 या 4 ब्लॉक के आकार के बराबर है, तो हम पहले से ही कम से कम एक ब्लॉक को मुक्त करने में सक्षम होंगे यदि हमारा पृष्ठ क्रमशः कम से कम 50% या 75% तक संपीड़ित है।

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

अपाचे इग्नाइट में डेटा संपीड़न। सबर का अनुभव

वर्तमान कार्यान्वयन में, इग्नाइट केवल लिनक्स ओएस के तहत विरल फ़ाइलों के साथ काम कर सकता है; तदनुसार, डिस्क पेज संपीड़न केवल इस ऑपरेटिंग सिस्टम पर इग्नाइट का उपयोग करते समय सक्षम किया जा सकता है।

संपीड़न एल्गोरिदम जिनका उपयोग डिस्क पेज संपीड़न के लिए किया जा सकता है: ZSTD, LZ4, Snappy। इसके अलावा, एक ऑपरेटिंग मोड (SKIP_GARBAGE) है, जिसमें शेष डेटा पर संपीड़न लागू किए बिना पृष्ठ में केवल अप्रयुक्त स्थान को बाहर निकाल दिया जाता है, जो पहले सूचीबद्ध एल्गोरिदम की तुलना में सीपीयू पर लोड को कम करता है।

प्रदर्शन प्रभाव

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

ऐसा करने के लिए, हमें यह याद रखना होगा कि पेजों तक पहुंचने पर उन्हें कैसे पढ़ा और लिखा जाता है:

  • रीड ऑपरेशन करते समय, इसे पहले रैम में खोजा जाता है; यदि खोज असफल होती है, तो पेज को उसी थ्रेड द्वारा डिस्क से रैम में लोड किया जाता है जो रीड करता है।
  • जब कोई लिखने का ऑपरेशन किया जाता है, तो रैम में पेज को गंदे के रूप में चिह्नित किया जाता है, लेकिन लिखने वाले थ्रेड द्वारा पेज को तुरंत डिस्क पर भौतिक रूप से सहेजा नहीं जाता है। सभी गंदे पेज बाद में चेकपॉइंट प्रक्रिया में अलग-अलग थ्रेड में डिस्क पर सहेजे जाते हैं।

तो पढ़ने के संचालन पर प्रभाव है:

  • सकारात्मक (डिस्क IO), रीड फ़ाइल सिस्टम ब्लॉक की संख्या में कमी के कारण।
  • नकारात्मक (सीपीयू), विरल फ़ाइलों के साथ काम करने के लिए ऑपरेटिंग सिस्टम द्वारा आवश्यक अतिरिक्त लोड के कारण। यह भी संभव है कि अधिक जटिल विरल फ़ाइल संरचना को सहेजने के लिए अतिरिक्त IO ऑपरेशन यहां परोक्ष रूप से दिखाई देंगे (दुर्भाग्य से, मैं विरल फ़ाइलों के काम करने के तरीके के सभी विवरणों से परिचित नहीं हूं)।
  • नकारात्मक (सीपीयू), पृष्ठों को डीकंप्रेस करने की आवश्यकता के कारण।
  • लेखन कार्य पर कोई प्रभाव नहीं पड़ता है.
  • चेकपॉइंट प्रक्रिया पर प्रभाव (यहां सब कुछ पढ़ने के संचालन के समान है):
  • सकारात्मक (डिस्क IO), लिखित फ़ाइल सिस्टम ब्लॉक की संख्या में कमी के कारण।
  • विरल फ़ाइलों के साथ काम करने के कारण नकारात्मक (सीपीयू, संभवतः डिस्क आईओ)।
  • नकारात्मक (सीपीयू), पृष्ठ संपीड़न की आवश्यकता के कारण।

तराजू का कौन सा किनारा तराजू को झुकाएगा? यह सब काफी हद तक पर्यावरण पर निर्भर करता है, लेकिन मेरा यह मानना ​​है कि डिस्क पृष्ठ संपीड़न से अधिकांश प्रणालियों के प्रदर्शन में गिरावट आने की संभावना है। इसके अलावा, अन्य डीबीएमएस पर परीक्षण जो विरल फ़ाइलों के साथ समान दृष्टिकोण का उपयोग करते हैं, संपीड़न सक्षम होने पर प्रदर्शन में गिरावट दिखाते हैं।

कैसे सक्षम और कॉन्फ़िगर करें

जैसा कि ऊपर उल्लेख किया गया है, अपाचे इग्नाइट का न्यूनतम संस्करण जो डिस्क पेज संपीड़न का समर्थन करता है 2.8 है और केवल लिनक्स ऑपरेटिंग सिस्टम समर्थित है। निम्नानुसार सक्षम और कॉन्फ़िगर करें:

  • क्लास-पाथ में एक इग्नाइट-कम्प्रेशन मॉड्यूल होना चाहिए। डिफ़ॉल्ट रूप से, यह अपाचे इग्नाइट वितरण में libs/वैकल्पिक निर्देशिका में स्थित है और क्लास-पथ में शामिल नहीं है। आप बस निर्देशिका को एक स्तर ऊपर libs तक ले जा सकते हैं और फिर जब आप इसे ignite.sh के माध्यम से चलाएंगे तो यह स्वचालित रूप से सक्षम हो जाएगा।
  • दृढ़ता सक्षम होनी चाहिए (के माध्यम से सक्षम)। DataRegionConfiguration.setPersistenceEnabled(true)).
  • पृष्ठ का आकार फ़ाइल सिस्टम ब्लॉक आकार से बड़ा होना चाहिए (आप इसका उपयोग करके सेट कर सकते हैं DataStorageConfiguration.setPageSize() ).
  • प्रत्येक कैश के लिए जिसके डेटा को संपीड़ित करने की आवश्यकता है, आपको संपीड़न विधि और (वैकल्पिक रूप से) संपीड़न स्तर (विधियों) को कॉन्फ़िगर करना होगा CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

वाल संघनन

Как это работает

वाल क्या है और इसकी आवश्यकता क्यों है? बहुत संक्षेप में: यह एक लॉग है जिसमें वे सभी घटनाएँ शामिल हैं जो अंततः पृष्ठ संग्रहण को बदल देती हैं। गिरावट की स्थिति में उबरने में सक्षम होने के लिए मुख्य रूप से इसकी आवश्यकता है। किसी भी ऑपरेशन को, उपयोगकर्ता को नियंत्रण देने से पहले, पहले वाल में एक ईवेंट रिकॉर्ड करना होगा, ताकि विफलता के मामले में, इसे लॉग में वापस चलाया जा सके और उन सभी ऑपरेशनों को पुनर्स्थापित किया जा सके जिनके लिए उपयोगकर्ता को एक सफल प्रतिक्रिया मिली, भले ही ये ऑपरेशन हों डिस्क पर पेज स्टोरेज में प्रतिबिंबित होने का समय नहीं था (पहले से ही ऊपर बताया गया है कि पेज स्टोर पर वास्तविक लेखन अलग-अलग थ्रेड्स द्वारा कुछ देरी के साथ "चेकपॉइंटिंग" नामक प्रक्रिया में किया जाता है)।

वाल में प्रविष्टियाँ तार्किक और भौतिक में विभाजित हैं। बूलियन स्वयं कुंजी और मूल्य हैं। भौतिक - पेज स्टोर में पृष्ठों में परिवर्तन को दर्शाता है। जबकि तार्किक रिकॉर्ड कुछ अन्य मामलों के लिए उपयोगी हो सकते हैं, भौतिक रिकॉर्ड की आवश्यकता केवल दुर्घटना की स्थिति में पुनर्प्राप्ति के लिए होती है और रिकॉर्ड की आवश्यकता केवल अंतिम सफल चेकपॉइंट के बाद से होती है। यहां हम विस्तार में नहीं जाएंगे और बताएंगे कि यह इस तरह क्यों काम करता है, लेकिन रुचि रखने वाले लोग अपाचे इग्नाइट विकी पर पहले से उल्लिखित लेख का संदर्भ ले सकते हैं: इग्नाइट परसिस्टेंट स्टोर - हुड के नीचे.

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

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

अपाचे इग्नाइट में डेटा संपीड़न। सबर का अनुभव

प्रदर्शन प्रभाव

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

कैसे सक्षम और कॉन्फ़िगर करें

आप संपत्ति का उपयोग करके वाल संघनन को सक्षम कर सकते हैं WalCompactionEnabled в DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). इसके अलावा, यदि आप डिफ़ॉल्ट मान (BEST_SPEED) से संतुष्ट नहीं हैं, तो DataStorageConfiguration.setWalCompactionLevel() विधि का उपयोग करके, आप संपीड़न स्तर सेट कर सकते हैं।

वाल पेज स्नैपशॉट संपीड़न

Как это работает

हम पहले ही पता लगा चुके हैं कि वाल में रिकॉर्ड को तार्किक और भौतिक में विभाजित किया गया है। प्रत्येक पृष्ठ में प्रत्येक परिवर्तन के लिए, पृष्ठ मेमोरी में एक भौतिक WAL रिकॉर्ड तैयार किया जाता है। बदले में, भौतिक रिकॉर्ड भी 2 उपप्रकारों में विभाजित होते हैं: पेज स्नैपशॉट रिकॉर्ड और डेल्टा रिकॉर्ड। हर बार जब हम किसी पृष्ठ पर कुछ बदलते हैं और उसे साफ़ स्थिति से गंदी स्थिति में स्थानांतरित करते हैं, तो इस पृष्ठ की एक पूरी प्रतिलिपि वाल (पेज स्नैपशॉट रिकॉर्ड) में संग्रहीत की जाती है। भले ही हमने वाल में केवल एक बाइट बदला हो, रिकॉर्ड पृष्ठ आकार से थोड़ा बड़ा होगा। यदि हम पहले से ही गंदे पेज पर कुछ बदलते हैं, तो वाल में एक डेल्टा रिकॉर्ड बनता है, जो केवल पेज की पिछली स्थिति की तुलना में परिवर्तनों को दर्शाता है, लेकिन पूरे पेज को नहीं। चूंकि चेकपॉइंट प्रक्रिया के दौरान पृष्ठों की स्थिति को गंदे से साफ करने के लिए रीसेट किया जाता है, चेकपॉइंट की शुरुआत के तुरंत बाद, लगभग सभी भौतिक रिकॉर्ड में केवल पेजों के स्नैपशॉट शामिल होंगे (क्योंकि चेकपॉइंट की शुरुआत के तुरंत बाद के सभी पेज साफ होते हैं) , फिर जैसे ही हम अगले चेकपॉइंट के पास पहुंचते हैं, डेल्टा रिकॉर्ड अंश बढ़ने लगता है और अगले चेकपॉइंट की शुरुआत में फिर से रीसेट हो जाता है। कुछ सिंथेटिक परीक्षणों पर माप से पता चला कि भौतिक रिकॉर्ड की कुल मात्रा में पेज स्नैपशॉट की हिस्सेदारी 90% तक पहुँच जाती है।

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

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

डिस्क पेज संपीड़न की तरह, वाल पेज स्नैपशॉट संपीड़न ZSTD, LZ4, स्नैपी संपीड़न एल्गोरिदम, साथ ही SKIP_GARBAGE मोड का उपयोग कर सकता है।

प्रदर्शन प्रभाव

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

यह उन थ्रेड्स को प्रभावित करता है जो डेटा को निम्न तरीके से बदलते हैं: डिस्क पर लिखने से पहले हर बार पृष्ठ को संपीड़ित करने की आवश्यकता के कारण हमें एक नकारात्मक प्रभाव (सीपीयू) मिलता है, और मात्रा में कमी के कारण एक सकारात्मक प्रभाव (डिस्क आईओ) मिलता है। डेटा लिखा. तदनुसार, यहां सब कुछ सरल है: यदि सिस्टम का प्रदर्शन सीपीयू द्वारा सीमित है, तो हमें थोड़ी गिरावट मिलती है, यदि यह डिस्क I/O द्वारा सीमित है, तो हमें वृद्धि मिलती है।

परोक्ष रूप से, वाल आकार को कम करने से उन धाराओं पर भी (सकारात्मक) प्रभाव पड़ता है जो वाल खंडों को संग्रह और वाल संघनन धाराओं में डंप कर देते हैं।

सिंथेटिक डेटा का उपयोग करके हमारे वातावरण में वास्तविक प्रदर्शन परीक्षणों में मामूली वृद्धि देखी गई (थ्रूपुट में 10% -15% की वृद्धि हुई, विलंबता में 10% -15% की कमी आई)।

कैसे सक्षम और कॉन्फ़िगर करें

न्यूनतम अपाचे इग्नाइट संस्करण: 2.8. निम्नानुसार सक्षम और कॉन्फ़िगर करें:

  • क्लास-पाथ में एक इग्नाइट-कम्प्रेशन मॉड्यूल होना चाहिए। डिफ़ॉल्ट रूप से, यह अपाचे इग्नाइट वितरण में libs/वैकल्पिक निर्देशिका में स्थित है और क्लास-पथ में शामिल नहीं है। आप बस निर्देशिका को एक स्तर ऊपर libs तक ले जा सकते हैं और फिर जब आप इसे ignite.sh के माध्यम से चलाएंगे तो यह स्वचालित रूप से सक्षम हो जाएगा।
  • दृढ़ता सक्षम होनी चाहिए (के माध्यम से सक्षम)। DataRegionConfiguration.setPersistenceEnabled(true)).
  • विधि का उपयोग करके संपीड़न मोड सेट किया जाना चाहिए DataStorageConfiguration.setWalPageCompression(), संपीड़न डिफ़ॉल्ट रूप से अक्षम है (अक्षम मोड)।
  • वैकल्पिक रूप से, आप विधि का उपयोग करके संपीड़न स्तर निर्धारित कर सकते हैं DataStorageConfiguration.setWalPageCompression(), प्रत्येक मोड के लिए मान्य मानों की विधि के लिए javadoc देखें।

निष्कर्ष

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

स्रोत: www.habr.com

एक टिप्पणी जोड़ें