paint-brush
डायनेमोडीबी से खोज और विश्लेषण को ऑफलोड करने के लिए इलास्टिकसर्च का उपयोग करना: फायदे और नुकसानद्वारा@rocksetcloud
4,401 रीडिंग
4,401 रीडिंग

डायनेमोडीबी से खोज और विश्लेषण को ऑफलोड करने के लिए इलास्टिकसर्च का उपयोग करना: फायदे और नुकसान

द्वारा Rockset8m2024/05/10
Read on Terminal Reader

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

यद्यपि इलास्टिकसर्च को लचीला और अत्यधिक अनुकूलन योग्य होने के लिए जाना जाता है, यह एक जटिल वितरित प्रणाली है, जिसे प्रदर्शनशील बने रहने के लिए क्लस्टर और इंडेक्स संचालन और प्रबंधन की आवश्यकता होती है।
featured image - डायनेमोडीबी से खोज और विश्लेषण को ऑफलोड करने के लिए इलास्टिकसर्च का उपयोग करना: फायदे और नुकसान
Rockset HackerNoon profile picture


डायनेमोडीबी पर विश्लेषण

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


ऐसा इसलिए है क्योंकि ऑपरेशनल वर्कलोड में जटिल विश्लेषणात्मक वर्कलोड की तुलना में बहुत अलग एक्सेस पैटर्न होते हैं। डायनेमोडीबी केवल सीमित संचालन का समर्थन करता है, जिससे एनालिटिक्स चुनौतीपूर्ण हो जाता है और कुछ स्थितियों में संभव नहीं होता है। डायनेमोडीबी के पीछे की कंपनी AWS भी कंपनियों को एनालिटिक्स को अन्य उद्देश्य-निर्मित समाधानों पर ऑफलोड करने पर विचार करने की सलाह देती है। एक समाधान जिसका आमतौर पर उल्लेख किया जाता है वह है इलास्टिकसर्च जिसके बारे में हम आज बात करेंगे।


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


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


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

AWS लैम्ब्डा का उपयोग करके डायनेमोडीबी को इलास्टिकसर्च से जोड़ना

आप विश्लेषण के लिए एलास्टिकसर्च में डायनेमोडीबी डेटा को लगातार लोड करने के लिए AWS लैम्ब्डा का उपयोग कर सकते हैं। यह इस प्रकार काम करता है:


  • DynamoDB स्ट्रीम से प्रत्येक अपडेट को Elasticsearch में सिंक करने के लिए एक लैम्ब्डा फ़ंक्शन बनाएं
  • मौजूदा DynamoDB टेबल का स्नैपशॉट लेने और उसे Elasticsearch को भेजने के लिए एक लैम्ब्डा फ़ंक्शन बनाएँ। DynamoDB टेबल की सामग्री को पढ़ने के लिए आप EC2 स्क्रिप्ट या Amazon Kinesis स्ट्रीम का उपयोग कर सकते हैं।



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

इलास्टिकसर्च का उपयोग करके डायनेमोडीबी डेटा पर पाठ खोज

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


DynamoDB डेटा को फ़िल्टर करने में मदद करने के लिए विभाजन का उपयोग करके कुछ सीमित टेक्स्ट खोज उपयोग मामलों का समर्थन कर सकता है। उदाहरण के लिए, यदि आप एक ईकॉमर्स साइट हैं, तो आप DynamoDB में उत्पाद श्रेणी के आधार पर डेटा का विभाजन कर सकते हैं और फिर इन-मेमोरी में खोज चला सकते हैं। जाहिर है, Amazon.com खुदरा प्रभाग बहुत सारे टेक्स्ट खोज उपयोग मामलों को इसी तरह संभालता है। DynamoDB एक ऐसे सम्मिलित फ़ंक्शन का भी समर्थन करता है जो आपको एक स्ट्रिंग खोजने में सक्षम बनाता है जिसमें डेटा का एक विशेष सबस्ट्रिंग होता है।



ई-कॉमर्स साइट उत्पाद श्रेणी के आधार पर डेटा का विभाजन कर सकती है। खोजे जा रहे डेटा के साथ ब्रांड और रंग जैसी अतिरिक्त विशेषताएं भी दिखाई जा सकती हैं।


ऐसे परिदृश्यों में जहाँ पूर्ण पाठ खोज आपके अनुप्रयोग का मुख्य हिस्सा है, आप प्रासंगिकता रैंकिंग के साथ Elasticsearch जैसे खोज इंजन का उपयोग करना चाहेंगे। यहाँ बताया गया है कि Elasticsearch में उच्च स्तर पर पाठ खोज कैसे काम करती है:


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


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


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

इलास्टिकसर्च का उपयोग करके डायनेमोडीबी डेटा पर जटिल फ़िल्टर

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


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


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


हमें DynamoDB में एक अतिरिक्त एक्सेस पैटर्न का समर्थन करने की भी आवश्यकता है, जब डिलीवरी में देरी SLA से अधिक हो। DynamoDB में सेकेंडरी इंडेक्स का उपयोग केवल उन डिलीवरी को फ़िल्टर करने के लिए किया जा सकता है जो SLA से अधिक हैं।


ETADelayedBeyondSLA फ़ील्ड पर एक इंडेक्स बनाया जाएगा जो बेस टेबल में पहले से मौजूद ETA विशेषता की प्रतिकृति है। यह डेटा ETADelayedBeyondSLA में तभी शामिल किया जाता है जब ETA SLA से ज़्यादा हो। सेकेंडरी इंडेक्स एक स्पर्स इंडेक्स है, जो क्वेरी में स्कैन किए जाने वाले डेटा की मात्रा को कम करता है। buyer विभाजन कुंजी है और सॉर्ट कुंजी ETADelayedBeyondSLA है।




द्वितीयक अनुक्रमणिकाओं का उपयोग अनुप्रयोग में बहुविध पहुँच पैटर्नों को समर्थन देने के लिए किया जा सकता है, जिसमें जटिल फिल्टरों से युक्त पहुँच पैटर्न भी शामिल हैं।


DynamoDB के क्वेरी और स्कैन API में फ़िल्टरएक्सप्रेशन ऑपरेशन है, जो किसी एक्सप्रेशन से मेल न खाने वाले परिणामों को फ़िल्टर करता है। filterexpression केवल क्वेरी या स्कैन टेबल ऑपरेशन के बाद ही लागू होता है, इसलिए आप अभी भी क्वेरी के लिए 1MB डेटा सीमा से बंधे हुए हैं। हालाँकि, filterexpression एप्लिकेशन लॉजिक को सरल बनाने, प्रतिक्रिया पेलोड आकार को कम करने और टाइम-टू-लाइव एक्सपायरी को मान्य करने में सहायक है। संक्षेप में, आपको अभी भी अपने एप्लिकेशन के एक्सेस पैटर्न के अनुसार अपने डेटा को विभाजित करना होगा या DynamoDB में डेटा फ़िल्टर करने के लिए सेकेंडरी इंडेक्स का उपयोग करना होगा।


डायनेमोडीबी डेटा को तेजी से प्राप्त करने के लिए कुंजियों और मानों में व्यवस्थित करता है और जटिल फ़िल्टरिंग के लिए आदर्श नहीं है। जब आपको जटिल फ़िल्टर की आवश्यकता होती है, तो आप Elasticsearch जैसे सर्च इंजन पर जाना चाह सकते हैं क्योंकि ये सिस्टम घास के ढेर में सुई की तरह काम करने वाले प्रश्नों के लिए आदर्श होते हैं।


इलास्टिकसर्च में, डेटा को सर्च इंडेक्स में संग्रहीत किया जाता है, जिसका अर्थ है उन दस्तावेजों की सूची जिसके लिए कॉलम-वैल्यू को पोस्टिंग सूची के रूप में संग्रहीत किया जाता है। कोई भी क्वेरी जिसमें एक प्रेडिकेट (यानी: WHERE user=A) होता है, वह प्रेडिकेट को संतुष्ट करने वाले दस्तावेजों की सूची को जल्दी से प्राप्त कर सकता है। जैसे-जैसे पोस्टिंग सूचियाँ क्रमबद्ध होती हैं, उन्हें क्वेरी के समय जल्दी से मर्ज किया जा सकता है ताकि सभी फ़िल्टरिंग मानदंड पूरे हो सकें। इलास्टिकसर्च अक्सर एक्सेस की जाने वाली जटिल फ़िल्टर क्वेरी की पुनर्प्राप्ति प्रक्रिया को तेज़ करने के लिएसरल कैशिंग का भी उपयोग करता है।


फ़िल्टर क्वेरीज़, जिन्हें आमतौर पर इलास्टिक्स सर्च में नॉन-स्कोरिंग क्वेरीज़ के रूप में संदर्भित किया जाता है, टेक्स्ट सर्च क्वेरीज़ की तुलना में डेटा को तेज़ी से और अधिक कुशलता से प्राप्त कर सकती हैं। ऐसा इसलिए है क्योंकि इन क्वेरीज़ के लिए प्रासंगिकता की आवश्यकता नहीं है। इसके अलावा, इलास्टिक्स सर्च रेंज क्वेरीज़ का भी समर्थन करता है जिससे ऊपरी और निचली सीमा (यानी: 0-5 के बीच की age ) के बीच डेटा को जल्दी से प्राप्त करना संभव हो जाता है।

इलास्टिकसर्च का उपयोग करके डायनेमोडीबी डेटा पर एकत्रीकरण

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


DynamoDB एग्रीगेट फ़ंक्शन का समर्थन नहीं करता है। AWS द्वारा सुझाया गया समाधान DynamoDB तालिका में डेटा का एग्रीगेट दृश्य बनाए रखने के लिए DynamoDB और Lambda का उपयोग करना है।


आइए ट्विटर जैसी सोशल मीडिया साइट पर लाइक को एकत्रित करने का उदाहरण लें। हम tweet_ID प्राथमिक कुंजी बनाएंगे और फिर सॉर्ट कुंजी को वह समय विंडो बनाएंगे जिसके द्वारा हम लाइक को एकत्रित कर रहे हैं। इस मामले में, हम डायनेमोडीबी स्ट्रीम को सक्षम करेंगे और एक लैम्ब्डा फ़ंक्शन संलग्न करेंगे ताकि जैसे ही ट्वीट को पसंद किया जाता है (या नापसंद किया जाता है) उन्हें टाइमस्टैम्प (यानी: last_ updated ) के साथ like_count में सारणीबद्ध किया जाता है।



इस परिदृश्य में, DynamoDB स्ट्रीम और लैम्ब्डा फ़ंक्शन का उपयोग तालिका पर एक विशेषता के रूप में like_count को सारणीबद्ध करने के लिए किया जाता है।


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


यहाँ Elasticsearch के एकत्रीकरण ढांचे का एक उच्च-स्तरीय अवलोकन दिया गया है:


  • बकेट एग्रीगेशन : आप SQL डेटाबेस की दुनिया में बकेटिंग को GROUP BY के समान समझ सकते हैं। आप फ़ील्ड मानों या श्रेणियों के आधार पर दस्तावेज़ों को समूहीकृत कर सकते हैं। इलास्टिक्सर्च बकेट एग्रीगेशन में नेस्टेड एग्रीगेशन और पैरेंट-चाइल्ड एग्रीगेशन भी शामिल हैं जो जॉइन सपोर्ट की कमी के लिए सामान्य समाधान हैं।

  • मीट्रिक एकत्रीकरण: मीट्रिक आपको दस्तावेज़ों के एक सेट पर SUM , COUNT , AVG , MIN , MAX , आदि जैसी गणनाएँ करने की अनुमति देता है। मीट्रिक का उपयोग बकेट एकत्रीकरण के लिए मानों की गणना करने के लिए भी किया जा सकता है।

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


एकत्रीकरण का उपयोग करते समय प्रदर्शन संबंधी निहितार्थ हो सकते हैं, विशेष रूप से जब आप Elasticsearch को स्केल करते हैं

डायनेमोडीबी पर खोज, एकत्रीकरण और जोड़ों के लिए इलास्टिकसर्च का विकल्प

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


रॉकसेट इलास्टिकसर्च का एक विकल्प है और एलेक्स डेब्री ने रॉकसेट पर SQL का उपयोग करके क्वेरीज़ को फ़िल्टर करने और एकत्र करने के बारे में बताया है। रॉकसेट एक क्लाउड-नेटिव डेटाबेस है जिसमें डायनेमोडीबी के लिए एक बिल्ट-इन कनेक्टर है, जिससे इसे शुरू करना और विश्लेषणात्मक उपयोग के मामलों को स्केल करना आसान हो जाता है, जिसमें जटिल जॉइन से जुड़े उपयोग के मामले भी शामिल हैं। आप $300 क्रेडिट के साथ हमारे निःशुल्क परीक्षण में इलास्टिकसर्च के विकल्प के रूप में रॉकसेट का पता लगा सकते हैं।