paint-brush
4 इलास्टिकसर्च प्रदर्शन चुनौतियाँ और उन्हें कैसे हल करेंद्वारा@rocksetcloud
4,113 रीडिंग
4,113 रीडिंग

4 इलास्टिकसर्च प्रदर्शन चुनौतियाँ और उन्हें कैसे हल करें

द्वारा Rockset5m2024/05/16
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इस ब्लॉग में, हम धीमी इंडेक्सिंग, खोज गति, शार्ड और इंडेक्स साइजिंग और मल्टी-टेनेंसी सहित सामान्य एलास्टिकसर्च प्रदर्शन चुनौतियों के समाधानों पर चर्चा करेंगे।
featured image - 4 इलास्टिकसर्च प्रदर्शन चुनौतियाँ और उन्हें कैसे हल करें
Rockset HackerNoon profile picture


इलास्टिकसर्च को स्केल करना

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


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

मैं Elasticsearch में अनुक्रमण प्रदर्शन कैसे सुधार सकता हूँ?

जब आप ऐसे कार्यभार से निपट रहे हों जिसमें उच्च लेखन थ्रूपुट हो, तो आपको इंडेक्सिंग प्रदर्शन को बढ़ाने के लिए Elasticsearch को ट्यून करने की आवश्यकता हो सकती है। हम इंडेक्सिंग के लिए पर्याप्त संसाधन उपलब्ध कराने के लिए कई सर्वोत्तम अभ्यास प्रदान करते हैं ताकि ऑपरेशन आपके एप्लिकेशन में खोज प्रदर्शन को प्रभावित न करे:


  • रिफ्रेश अंतराल बढ़ाएँ : Elasticsearch इंडेक्स को रिफ्रेश करके खोज के लिए नया डेटा उपलब्ध कराता है। जब इंडेक्स को पिछले 30 सेकंड में कोई क्वेरी प्राप्त होती है, तो रिफ्रेश हर सेकंड अपने आप होने के लिए सेट हो जाता है। इंडेक्सिंग के लिए ज़्यादा संसाधन आरक्षित करने के लिए आप रिफ्रेश अंतराल बढ़ा सकते हैं।


  • बल्क एपीआई का उपयोग करें: बड़े पैमाने पर डेटा को इन्जेक्ट करते समय, अपडेट एपीआई का उपयोग करके इंडेक्सिंग समय में सप्ताह लग सकते हैं। इन परिदृश्यों में, आप बल्क एपीआई का उपयोग करके अधिक संसाधन-कुशल तरीके से डेटा की इंडेक्सिंग को गति दे सकते हैं। बल्क एपीआई के साथ भी, आपको इंडेक्स किए गए दस्तावेज़ों की संख्या और बल्क अनुरोध के समग्र आकार के बारे में पता होना चाहिए ताकि यह सुनिश्चित हो सके कि यह क्लस्टर प्रदर्शन में बाधा नहीं डालता है। इलास्टिक बल्क आकार को बेंचमार्क करने की सलाह देता है और सामान्य नियम के रूप में 5-15 एमबी/बल्क अनुरोध है।


  • इंडेक्स बफर आकार बढ़ाएँ: आप बकाया इंडेक्सिंग अनुरोधों के लिए मेमोरी सीमा को हीप के डिफ़ॉल्ट मान 10% से ऊपर तक बढ़ा सकते हैं। इंडेक्सिंग-भारी कार्यभार के लिए यह सलाह दी जा सकती है, लेकिन यह अन्य संचालनों को प्रभावित कर सकता है जो मेमोरी गहन हैं।


  • प्रतिकृति अक्षम करें: आप अनुक्रमण को गति देने के लिए प्रतिकृति को शून्य पर सेट कर सकते हैं, लेकिन यदि आपके कार्यभार के लिए रिकॉर्ड की प्रणाली Elasticsearch है तो यह सलाह नहीं दी जाती है।


  • इन-प्लेस अपसर्ट और डेटा म्यूटेशन को सीमित करें : इन्सर्ट, अपडेट और डिलीट के लिए पूरे दस्तावेज़ को फिर से इंडेक्स करना ज़रूरी है। अगर आप CDC या ट्रांजेक्शनल डेटा को Elasticsearch में स्ट्रीम कर रहे हैं, तो आपको कम डेटा स्टोर करने पर विचार करना चाहिए क्योंकि फिर रीइंडेक्स करने के लिए कम डेटा होगा।


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

Elasticsearch में अपनी खोज गति बढ़ाने के लिए मुझे क्या करना चाहिए?

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


  • एकसमग्र इंडेक्स बनाएँ: दो कम कार्डिनैलिटी फ़ील्ड के मानों को एक साथ मर्ज करके एक उच्च कार्डिनैलिटी फ़ील्ड बनाएँ जिसे आसानी से खोजा और प्राप्त किया जा सके। उदाहरण के लिए, आप ज़िपकोड और महीने के साथ एक फ़ील्ड मर्ज कर सकते हैं, अगर ये दो फ़ील्ड हैं जिन्हें आप आमतौर पर अपनी क्वेरी के लिए फ़िल्टर कर रहे हैं।


  • दस्तावेजों की कस्टम रूटिंग सक्षम करें: इलास्टिक्सर्च सभी शार्ड्स को परिणाम लौटाने के लिए क्वेरी प्रसारित करता है। कस्टम रूटिंग के साथ, आप क्वेरी निष्पादन को गति देने के लिए यह निर्धारित कर सकते हैं कि आपका डेटा किस शार्ड पर रहता है। हालाँकि, कस्टम रूटिंग को अपनाते समय आपको हॉटस्पॉट की तलाश करनी चाहिए।


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


  • पैरेंट-चाइल्ड और नेस्टेड ऑब्जेक्ट से दूर रहें: पैरेंट-चाइल्ड रिलेशनशिप Elasticsearch में जॉइन सपोर्ट की कमी के लिए एक अच्छा समाधान है और इसने इनजेक्शन को तेज़ करने और रीइंडेक्सिंग को सीमित करने में मदद की है। आखिरकार, संगठन इस दृष्टिकोण के साथ मेमोरी सीमा तक पहुँच जाते हैं। जब ऐसा होता है, तो आप डेटा डीनॉर्मलाइज़ेशन करके क्वेरी प्रदर्शन को तेज़ कर पाएंगे।

मुझे स्केल के लिए Elasticsearch शार्ड्स और इंडेक्स का आकार कैसे निर्धारित करना चाहिए?

Elasticsearch के साथ स्केलिंग की कई चुनौतियाँ शार्डिंग और इंडेक्सिंग रणनीति पर निर्भर करती हैं। आपके पास कितने शार्ड होने चाहिए या आपके शार्ड कितने बड़े होने चाहिए, इस बारे में कोई एक रणनीति नहीं है। रणनीति निर्धारित करने का सबसे अच्छा तरीका एक समान, उत्पादन कार्यभार पर परीक्षण और बेंचमार्क चलाना है। विचार करने के लिए यहाँ कुछ अतिरिक्त सलाह दी गई है:


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


  • लोड असंतुलन से सावधान रहें: Elasticsearch के पास शार्ड द्वारा संसाधन उपयोग को समझने और शार्ड प्लेसमेंट निर्धारित करते समय इसे ध्यान में रखने का कोई अच्छा तरीका नहीं है। नतीजतन, हॉट शार्ड होना संभव है। इस स्थिति से बचने के लिए, आप डेटा नोट्स की तुलना में अधिक शार्ड और डेटा नोड्स की तुलना में छोटे शार्ड रखने पर विचार कर सकते हैं।


  • समय-आधारित इंडेक्स का उपयोग करें: समय-आधारित इंडेक्स रिटेंशन के आधार पर आपके क्लस्टर में इंडेक्स और शार्ड की संख्या को कम कर सकते हैं। इलास्टिक्सर्च एक रोलओवर इंडेक्स एपीआई भी प्रदान करता है ताकि आप संसाधनों को मुक्त करने के लिए उम्र या दस्तावेज़ के आकार के आधार पर एक नए इंडेक्स पर रोलओवर कर सकें।

मुझे मल्टी-टेनेंसी के लिए कैसे डिज़ाइन करना चाहिए?

मल्टी-टेनेंसी के लिए सबसे आम रणनीतियाँ प्रति ग्राहक या टेनेंट एक इंडेक्स रखना या कस्टम रूटिंग का उपयोग करना है। यहाँ बताया गया है कि आप अपने कार्यभार के लिए रणनीतियों का मूल्यांकन कैसे कर सकते हैं:


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


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

एलास्टिकसर्च को स्केल करना है या नहीं करना है!

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


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