2016-04-06 6 views
7

मैंने Elasticsearch में इंडेक्स रीफ्रेशिंग के बारे में बहुत सारे लेख पढ़े हैं। मैं विभिन्न अंतराल के निहितार्थ को समझता हूं जो कि 0 से अधिक हैं, जो लगातार खंडों के बीच विलुप्त समय है, जिससे उन्हें खोज के लिए उपलब्ध कराया जाता है। हालांकि, मुझे यकीन नहीं है कि refresh_interval: -1 बिल्कुल क्या करता है। मेरी समझ में, यह स्वचालित इंडेक्स रीफ्रेशिंग को अक्षम करने का एक माध्यम है लेकिन पूरी तरह से नहीं। Elasticsearch अभी भी समय-समय पर खंडों को फहराता है भले ही refresh_interval -1 पर सेट हो। मुझे आश्चर्य है कि स्वचालित रीफ्रेश अक्षम होने पर कौन सी तंत्र इस फ़्लशिंग गतिविधि को नियंत्रित करती है।Elasticsearch में -1 refresh_interval वास्तव में क्या मतलब है?

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

After disabling refresh interval, heap usage rises less aggressively

उत्तर

8

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

जब कोई दस्तावेज़ अनुक्रमित होता है, तो इसे इन-मेमोरी बफर में जोड़ा जाता है और अनुवाद फ़ाइल में जोड़ा जाता है। जब रीफ्रेश होता है तो बफर में दस्तावेज़ों को एक नए सेगमेंट में लिखा जाता है, बिना किसी fsync के बिना, सेगमेंट को खोज के लिए दृश्यमान करने के लिए खोला जाता है और बफर साफ़ कर दिया जाता है। अनुवाद अभी तक को साफ़ नहीं किया गया है और वास्तव में डिस्क पर कुछ भी नहीं है (क्योंकि fsync नहीं था)।

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

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

+0

धन्यवाद यह बहुत समझ में आता है, विशेष रूप से क्योंकि मैं केवल अनुक्रमणों को देखता हूं जब बहुत सारे अनुक्रमण होते हैं। –

1

डिफ़ॉल्ट रूप से, index.refresh_interval 1s को तैयार है। वास्तव में यह कुछ विशेष रूप से जब अनुक्रमण में ईएस में एक महंगी ऑपरेशन के रूप में कहा जा सकता है। आप ध्यान दें कि जब आप refresh_interval बढ़ाते हैं।

index.refresh_interval से -1 को सेट करके इसका मतलब है कि आप इसे अक्षम कर रहे हैं और इससे आपको ES को अनुक्रमणित करते समय एक महत्वपूर्ण लाभ मिल सकता है। तुम बस रीफ़्रेश_अंतराल निष्क्रिय करने के लिए (जब आप अनुक्रमण डेटा खत्म फिर से सक्षम)

curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "-1" }}' 

#index data...... 

curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "1s" }}' 

जरूरत है और आप अनुक्रमण निरंतरता सुनिश्चित करने के बाद अपने आवश्यकता के अनुसार एक उपयुक्त मूल्य निर्धारित कर सकते हैं। एक उपयोगी लेख: - https://sematext.com/blog/2013/07/08/elasticsearch-refresh-interval-vs-indexing-performance/

उम्मीद है कि यह मदद करता है!

+0

मेरा प्रश्न यह है कि यह अक्षम है, फिर भी खंड ल्यूसीन स्तर पर नीचे फंस गए हैं। रीफ्रेश अंतराल नहीं होने पर यह फ़्लशिंग को नियंत्रित करता है? –

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