कई विकास दल बड़े पैमाने पर इवेंट-संचालित आर्किटेक्चर और उपयोगकर्ता-अनुकूल, प्रदर्शनकारी एप्लिकेशन बनाने के लिए डायनेमोडीबी का सहारा लेते हैं। एक परिचालन डेटाबेस के रूप में, डायनेमोडीबी कई भौगोलिक स्थानों पर तैनात होने पर भी वास्तविक समय के लेन-देन के लिए अनुकूलित है। हालाँकि, यह खोज और एनालिटिक्स एक्सेस पैटर्न के लिए मजबूत प्रदर्शन प्रदान नहीं करता है।
जबकि डायनेमोडीबी जैसे नोएसक्यूएल डेटाबेस में आम तौर पर उत्कृष्ट स्केलिंग विशेषताएँ होती हैं, वे केवल सीमित संचालन का समर्थन करते हैं जो ऑनलाइन लेनदेन प्रसंस्करण पर केंद्रित होते हैं। इससे कुशल इंडेक्सिंग रणनीतियों पर बहुत अधिक निर्भर हुए बिना डेटा को खोजना, फ़िल्टर करना, एकत्र करना और जोड़ना मुश्किल हो जाता है।
डायनेमोडीबी प्रत्येक आइटम में मौजूद उपयोगकर्ता-निर्दिष्ट विभाजन कुंजी फ़ील्ड के आधार पर बड़ी संख्या में नोड्स पर विभाजन करके डेटा को हुड के नीचे संग्रहीत करता है। इस उपयोगकर्ता-निर्दिष्ट विभाजन कुंजी को वैकल्पिक रूप से एक प्राथमिक कुंजी का प्रतिनिधित्व करने के लिए सॉर्ट कुंजी के साथ जोड़ा जा सकता है। प्राथमिक कुंजी एक इंडेक्स के रूप में कार्य करती है, जिससे क्वेरी ऑपरेशन सस्ते हो जाते हैं। एक क्वेरी ऑपरेशन विभाजन कुंजी पर समानता तुलना (=) और निर्दिष्ट होने पर सॉर्ट कुंजी पर तुलनात्मक संचालन (>, <, =, BETWEEN) कर सकता है।
उपरोक्त योजना द्वारा कवर नहीं किए गए विश्लेषणात्मक प्रश्नों को निष्पादित करने के लिए स्कैन ऑपरेशन का उपयोग करने की आवश्यकता होती है, जिसे आम तौर पर समानांतर में संपूर्ण DynamoDB तालिका पर स्कैन करके निष्पादित किया जाता है। ये स्कैन रीड थ्रूपुट के मामले में धीमे और महंगे हो सकते हैं क्योंकि उन्हें संपूर्ण तालिका को पूरा पढ़ने की आवश्यकता होती है। जब तालिका का आकार बढ़ता है तो स्कैन भी धीमा हो जाता है, क्योंकि परिणाम उत्पन्न करने के लिए स्कैन करने के लिए अधिक डेटा होता है। यदि हम निषेधात्मक स्कैन लागतों का सामना किए बिना विश्लेषणात्मक प्रश्नों का समर्थन करना चाहते हैं, तो हम द्वितीयक इंडेक्स का लाभ उठा सकते हैं, जिस पर हम आगे चर्चा करेंगे।
डायनेमोडीबी में, सेकेंडरी इंडेक्स का इस्तेमाल अक्सर उन फ़ील्ड को इंडेक्स करके एप्लीकेशन परफॉरमेंस को बेहतर बनाने के लिए किया जाता है, जिन्हें अक्सर क्वेरी किया जाता है। सेकेंडरी इंडेक्स पर क्वेरी ऑपरेशन का इस्तेमाल विश्लेषणात्मक क्वेरी के ज़रिए विशिष्ट सुविधाओं को पावर देने के लिए भी किया जा सकता है, जिनकी ज़रूरतें स्पष्ट रूप से परिभाषित हैं।
सेकेंडरी इंडेक्स में उन फ़ील्ड पर पार्टीशन कुंजियाँ और वैकल्पिक सॉर्ट कुंजियाँ बनाना शामिल है जिन्हें हम क्वेरी करना चाहते हैं। सेकेंडरी इंडेक्स दो प्रकार के होते हैं:
स्थानीय द्वितीयक अनुक्रमणिका (LSIs): LSIs एकल विभाजन के लिए हैश और श्रेणी कुंजी विशेषताओं का विस्तार करते हैं।
वैश्विक द्वितीयक अनुक्रमणिकाएँ (GSIs): GSIs वे अनुक्रमणिकाएँ हैं जो एकल विभाजन के बजाय संपूर्ण तालिका पर लागू होती हैं।
हालाँकि, जैसा कि नाइक ने पाया , डायनेमोडीबी में जीएसआई का अत्यधिक उपयोग महंगा हो सकता है। डायनेमोडीबी में एनालिटिक्स, जब तक कि उनका उपयोग केवल बहुत ही सरल बिंदु लुकअप या छोटी रेंज स्कैन के लिए न किया जाए, माध्यमिक इंडेक्स के अत्यधिक उपयोग और उच्च लागत का परिणाम हो सकता है।
इंडेक्स का उपयोग करते समय प्रावधानित क्षमता की लागत तेज़ी से बढ़ सकती है क्योंकि बेस टेबल में सभी अपडेट संबंधित GSI में भी किए जाने होते हैं। वास्तव में, AWS सलाह देता है कि वैश्विक द्वितीयक इंडेक्स के लिए प्रावधानित लेखन क्षमता बेस टेबल की लेखन क्षमता के बराबर या उससे अधिक होनी चाहिए ताकि बेस टेबल में लेखन को थ्रॉटल करने और एप्लिकेशन को अपंग करने से बचा जा सके। प्रावधानित लेखन क्षमता की लागत कॉन्फ़िगर किए गए GSI की संख्या के साथ रैखिक रूप से बढ़ती है, जिससे कई एक्सेस पैटर्न का समर्थन करने के लिए कई GSI का उपयोग करना लागत निषेधात्मक हो जाता है।
डायनेमोडीबी भी नेस्टेड संरचनाओं में डेटा को इंडेक्स करने के लिए अच्छी तरह से डिज़ाइन नहीं किया गया है, जिसमें एरे और ऑब्जेक्ट शामिल हैं। डेटा को इंडेक्स करने से पहले, उपयोगकर्ताओं को डेटा को डीनॉर्मलाइज़ करना होगा, नेस्टेड ऑब्जेक्ट और एरे को समतल करना होगा। इससे लिखने की संख्या और संबंधित लागत में बहुत वृद्धि हो सकती है।
विश्लेषण के लिए डायनेमोडीबी सेकेंडरी इंडेक्स का उपयोग करने की अधिक विस्तृत जांच के लिए, हमारा ब्लॉग डायनेमोडीबी पर विश्लेषण के लिए सेकेंडरी इंडेक्स देखें।
निष्कर्ष यह है कि विश्लेषणात्मक उपयोग के मामलों के लिए, आप डायनेमोडीबी तालिका को एक अलग उपकरण या सेवा के साथ सिंक करके महत्वपूर्ण प्रदर्शन और लागत लाभ प्राप्त कर सकते हैं जो जटिल विश्लेषण को कुशलतापूर्वक चलाने के लिए बाहरी द्वितीयक सूचकांक के रूप में कार्य करता है।
हमारे डेटा पर सेकेंडरी इंडेक्स बनाने का एक तरीका है डायनेमोडीबी का उपयोग इलास्टिकसर्च के साथ करना। क्लाउड-आधारित इलास्टिकसर्च, जैसे इलास्टिक क्लाउड या अमेज़ॅन ओपनसर्च सर्विस, का उपयोग इंडेक्स के आकार, प्रतिकृति और अन्य आवश्यकताओं के अनुसार नोड्स को प्रावधान और कॉन्फ़िगर करने के लिए किया जा सकता है। एक प्रबंधित क्लस्टर को अपग्रेड करने, सुरक्षित करने और प्रदर्शन को बनाए रखने के लिए कुछ ऑपरेशन की आवश्यकता होती है, लेकिन EC2 इंस्टेंस पर इसे पूरी तरह से चलाने की तुलना में कम।
चूंकि Amazon DynamoDB के लिए Logstash प्लगइन का उपयोग करने का तरीका असमर्थित है और इसे सेट करना काफी कठिन है, इसलिए हम DynamoDB स्ट्रीम और AWS लैम्ब्डा फ़ंक्शन का उपयोग करके DynamoDB से Elasticsearch में लेखन स्ट्रीम कर सकते हैं। इस दृष्टिकोण के लिए हमें दो अलग-अलग चरण करने होंगे:
हमें इन दोनों लैम्ब्डा फ़ंक्शन को सही अनुमतियों के साथ लिखना और वायर करना होगा ताकि यह सुनिश्चित हो सके कि हम अपनी तालिकाओं में कोई भी लेखन न चूकें। जब उन्हें आवश्यक निगरानी के साथ सेट किया जाता है, तो हम डायनेमोडीबी से इलास्टिकसर्च में दस्तावेज़ प्राप्त कर सकते हैं और डेटा पर विश्लेषणात्मक क्वेरी चलाने के लिए इलास्टिकसर्च का उपयोग कर सकते हैं।
इस दृष्टिकोण का लाभ यह है कि इलास्टिकसर्च पूर्ण-पाठ अनुक्रमण और कई प्रकार की विश्लेषणात्मक क्वेरी का समर्थन करता है। इलास्टिकसर्च विभिन्न भाषाओं में क्लाइंट का समर्थन करता है और विज़ुअलाइज़ेशन के लिए किबाना जैसे टूल जो डैशबोर्ड को तेज़ी से बनाने में मदद कर सकते हैं। जब क्लस्टर को सही तरीके से कॉन्फ़िगर किया जाता है, तो इलास्टिकसर्च में प्रवाहित होने वाले डेटा पर तेज़ विश्लेषणात्मक क्वेरी के लिए क्वेरी विलंबता को ट्यून किया जा सकता है।
नुकसान में यह शामिल है कि समाधान की स्थापना और रखरखाव लागत अधिक हो सकती है। यहां तक कि प्रबंधित इलास्टिक्सर्च को भी अंतर्निहित इंस्टेंस की प्रतिकृति, रीशर्डिंग, इंडेक्स वृद्धि और प्रदर्शन ट्यूनिंग से निपटने की आवश्यकता होती है।
इलास्टिक्सर्च में एक कसकर युग्मित आर्किटेक्चर है जो कंप्यूट और स्टोरेज को अलग नहीं करता है। इसका मतलब है कि संसाधन अक्सर ओवरप्रोविजन किए जाते हैं क्योंकि उन्हें स्वतंत्र रूप से स्केल नहीं किया जा सकता है। इसके अलावा, कई कार्यभार, जैसे कि पढ़ना और लिखना, एक ही कंप्यूट संसाधनों के लिए संघर्ष करेंगे।
इलास्टिकसर्च अपडेट को भी कुशलता से संभाल नहीं सकता। किसी भी फ़ील्ड को अपडेट करने से पूरे दस्तावेज़ की पुनः अनुक्रमणिका शुरू हो जाएगी। इलास्टिकसर्च दस्तावेज़ अपरिवर्तनीय हैं, इसलिए किसी भी अपडेट के लिए नए दस्तावेज़ को अनुक्रमित करने और पुराने संस्करण को हटाए जाने के लिए चिह्नित करने की आवश्यकता होती है। इसके परिणामस्वरूप अपरिवर्तित फ़ील्ड को पुनः अनुक्रमित करने और अपडेट पर संपूर्ण दस्तावेज़ लिखने के लिए अतिरिक्त कंप्यूट और I/O खर्च होता है।
क्योंकि लैम्बडास तब फायर करते हैं जब वे डायनेमोडीबी स्ट्रीम में अपडेट देखते हैं, इसलिए कोल्ड स्टार्ट के कारण उनमें लेटेंसी स्पाइक्स हो सकते हैं। सेटअप को यह सुनिश्चित करने के लिए मेट्रिक्स और मॉनिटरिंग की आवश्यकता होती है कि यह डायनेमोडीबी स्ट्रीम से घटनाओं को सही ढंग से संसाधित कर रहा है और इलास्टिक्सर्च में लिखने में सक्षम है।
कार्यात्मक रूप से, विश्लेषणात्मक प्रश्नों के संदर्भ में, Elasticsearch में जॉइन के लिए समर्थन की कमी है , जो जटिल विश्लेषणात्मक प्रश्नों के लिए उपयोगी है जिसमें एक से अधिक इंडेक्स शामिल हैं। Elasticsearch उपयोगकर्ताओं को अक्सर इस सीमा को पार करने के लिए डेटा को डीनॉर्मलाइज़ करना पड़ता है, एप्लिकेशन-साइड जॉइन करना पड़ता है, या नेस्टेड ऑब्जेक्ट या पैरेंट-चाइल्ड रिलेशनशिप का उपयोग करना पड़ता है।
लाभ
नुकसान
यह दृष्टिकोण डायनेमोडीबी और किबाना का उपयोग करके डैशबोर्ड में डेटा पर पूर्ण-पाठ खोज को लागू करते समय अच्छी तरह से काम कर सकता है। हालाँकि, उत्पादन में एक इलास्टिकसर्च क्लस्टर को ट्यून करने और बनाए रखने के लिए आवश्यक संचालन, संसाधनों का अकुशल उपयोग और जॉइन क्षमताओं की कमी चुनौतीपूर्ण हो सकती है।
रॉकसेट एक पूर्णतः प्रबंधित खोज और विश्लेषण डेटाबेस है जिसे मुख्य रूप से उच्च QPS आवश्यकताओं वाले वास्तविक समय अनुप्रयोगों का समर्थन करने के लिए बनाया गया है। इसे अक्सर OLTP डेटाबेस से डेटा के लिए बाहरी द्वितीयक सूचकांक के रूप में उपयोग किया जाता है।
रॉकसेट में डायनेमोडीबी के साथ एक अंतर्निहित कनेक्टर है जिसका उपयोग डायनेमोडीबी और रॉकसेट के बीच डेटा को सिंक में रखने के लिए किया जा सकता है। हम उस डायनेमोडीबी टेबल को निर्दिष्ट कर सकते हैं जिससे हम सामग्री को सिंक करना चाहते हैं और रॉकसेट संग्रह जो टेबल को अनुक्रमित करता है। रॉकसेट डायनेमोडीबी टेबल की सामग्री को एक पूर्ण स्नैपशॉट में अनुक्रमित करता है और फिर नए परिवर्तनों के होने पर उन्हें सिंक करता है। रॉकसेट संग्रह की सामग्री हमेशा डायनेमोडीबी स्रोत के साथ सिंक में रहती है; स्थिर अवस्था में कुछ सेकंड से अधिक नहीं।
रॉकसेट, स्ट्रीम की स्थिति की निगरानी करके और डायनेमोडीबी से स्ट्रीमिंग परिवर्तनों में दृश्यता प्रदान करके, डायनेमोडीबी तालिका और रॉकसेट संग्रह के बीच डेटा अखंडता और संगतता को स्वचालित रूप से प्रबंधित करता है।
स्कीमा परिभाषा के बिना, रॉकसेट संग्रह स्वचालित रूप से तब अनुकूलित हो सकता है जब फ़ील्ड जोड़े/हटाए जाते हैं, या जब डेटा की संरचना/प्रकार स्वयं डायनेमोडीबी में बदल जाता है। यह मजबूत गतिशील टाइपिंग औरस्मार्ट स्कीमा द्वारा संभव बनाया गया है जो किसी भी अतिरिक्त ETL की आवश्यकता को समाप्त करता है।
रॉकसेट संग्रह जिसे हमने डायनेमोडीबी से प्राप्त किया है, क्वेरी के लिए SQL का समर्थन करता है और इसे डेवलपर्स द्वारा डोमेन-विशिष्ट भाषा सीखे बिना आसानी से उपयोग किया जा सकता है। इसका उपयोग REST API पर या कई प्रोग्रामिंग भाषाओं में क्लाइंट लाइब्रेरी का उपयोग करके अनुप्रयोगों को क्वेरी प्रदान करने के लिए भी किया जा सकता है। ANSI SQL का सुपरसेट जो रॉकसेट का समर्थन करता है, वह गहराई से नेस्टेड JSON सरणियों और ऑब्जेक्ट्स पर मूल रूप से काम कर सकता है, और सभी फ़ील्ड पर स्वचालित रूप से बनाए गए इंडेक्स का लाभ उठा सकता है, ताकि जटिल विश्लेषणात्मक क्वेरी पर भी मिलीसेकंड विलंबता प्राप्त हो सके।
रॉकसेट ने कंप्यूट-कंप्यूट सेपरेशन में अग्रणी भूमिका निभाई है, जो एक ही अंतर्निहित वास्तविक समय डेटा को साझा करते हुए अलग-अलग कंप्यूट इकाइयों में कार्यभार को अलग करने की अनुमति देता है। यह उपयोगकर्ताओं को एक ही डेटा सेट पर एक साथ अंतर्ग्रहण और क्वेरी या कई अनुप्रयोगों का समर्थन करते समय अधिक संसाधन दक्षता प्रदान करता है।
इसके अलावा, Rockset सुरक्षा, डेटा के एन्क्रिप्शन और उस तक पहुँच के प्रबंधन के लिए भूमिका-आधारित पहुँच नियंत्रण का ध्यान रखता है। Rockset उपयोगकर्ता डेटा को संग्रह में आने पर संशोधित करने के लिए Rockset में सेट किए जा सकने वाले इनजेस्ट ट्रांसफ़ॉर्मेशन का लाभ उठाकर ETL की आवश्यकता से बच सकते हैं। उपयोगकर्ता पुराने डेटा को स्वचालित रूप से शुद्ध करने के लिए अवधारण नीतियों को सेट करके वैकल्पिक रूप से डेटा के जीवनचक्र का प्रबंधन भी कर सकते हैं। डेटा अंतर्ग्रहण और क्वेरी सर्विंग दोनों को स्वचालित रूप से प्रबंधित किया जाता है, जो हमें बुनियादी ढांचे के प्रबंधन और संचालन की आवश्यकता को हटाते हुए लाइव डैशबोर्ड और एप्लिकेशन बनाने और तैनात करने पर ध्यान केंद्रित करने देता है।
डायनेमोडीबी के साथ सिंकिंग के संबंध में विशेष रूप से प्रासंगिक, रॉकसेट इन-प्लेस फ़ील्ड-लेवल अपडेट का समर्थन करता है, ताकि महंगी रीइंडेक्सिंग से बचा जा सके। नौकरी के लिए सही उपकरण चुनने के लिए अंतर्ग्रहण, क्वेरी और दक्षता के संदर्भ में रॉकसेट और इलास्टिकसर्च की तुलना करें ।
हम DynamoDB में डेटा पर रीयल-टाइम एनालिटिक्स को लागू करने के लिए Rockset का उपयोग कर सकते हैं, बिना किसी ऑपरेशनल, स्केलिंग या रखरखाव संबंधी चिंताओं के। यह रीयल-टाइम एप्लिकेशन के विकास को काफी तेज़ कर सकता है। यदि आप Rockset का उपयोग करके DynamoDB डेटा पर अपना एप्लिकेशन बनाना चाहते हैं, तो आप यहाँ मुफ़्त में आरंभ कर सकते हैं।