ग्राहकों की अपेक्षाएँ और अनुप्रयोगों पर तदनुरूप माँगें कभी इतनी अधिक नहीं रहीं। उपयोगकर्ता उम्मीद करते हैं कि एप्लिकेशन तेज़, विश्वसनीय और उपलब्ध हों। इसके अलावा, डेटा राजा है, और उपयोगकर्ता अंतर्दृष्टि खोजने के लिए आवश्यकतानुसार एकत्रित डेटा को काटने और काटने में सक्षम होना चाहते हैं। उपयोगकर्ता नए इंडेक्स का प्रावधान करने या नई ईटीएल श्रृंखला बनाने के लिए डेटा इंजीनियरों की प्रतीक्षा नहीं करना चाहते हैं। वे उपलब्ध नवीनतम डेटा तक निर्बाध पहुंच चाहते हैं। लेकिन किसी भी एकल डेटाबेस के लिए आपकी सभी एप्लिकेशन आवश्यकताओं को संभालना एक कठिन काम है। डेटाबेस के लिए, व्यक्तिगत रिकॉर्ड पर लगातार, कम-विलंबता संचालन के लिए अनुकूलन करना कम-बार-बार एकत्रीकरण या कई रिकॉर्ड में भारी फ़िल्टरिंग के लिए अनुकूलन से अलग है। कई बार, हम एक ही डेटाबेस के साथ दोनों पैटर्न को संभालने का प्रयास करते हैं और हमारे एप्लिकेशन स्केल के रूप में असंगत प्रदर्शन से निपटते हैं। हम सोचते हैं कि हम न्यूनतम प्रयास या लागत के लिए अनुकूलन कर रहे हैं, जबकि वास्तव में हम इसके विपरीत कर रहे हैं। ओएलटीपी डेटाबेस पर एनालिटिक्स चलाने के लिए आमतौर पर यह आवश्यक होता है कि हम ट्रैफ़िक में चरम सीमा को ध्यान में रखते हुए डेटाबेस का अधिक प्रावधान करें। इसमें बहुत सारा पैसा खर्च होता है और आमतौर पर अंतिम उपयोगकर्ता को सुखद अनुभव प्रदान करने में विफल रहता है। इस वॉकथ्रू में, हम देखेंगे कि इन दोनों एक्सेस पैटर्न के साथ उपयोगकर्ताओं की उच्च मांगों को कैसे संभाला जाए। हम एक वित्तीय एप्लिकेशन का निर्माण करेंगे जिसमें उपयोगकर्ता लेनदेन रिकॉर्ड कर रहे हैं और हाल के लेनदेन देख रहे हैं, जबकि वे अपने पिछले लेनदेन पर जटिल फ़िल्टरिंग या एकत्रीकरण भी चाहते हैं। एक हाइब्रिड दृष्टिकोण अपनी एप्लिकेशन आवश्यकताओं को संभालने के लिए, हम के साथ उपयोग करेंगे। DynamoDB हमारे मुख्य लेन-देन पहुंच पैटर्न को संभालेगा - लेन-देन की रिकॉर्डिंग और उपयोगकर्ताओं को ब्राउज़ करने के लिए हाल के लेन-देन की फ़ीड प्रदान करेगा। रॉकसेट हमारे डेटा-भारी, "आनंददायक" एक्सेस पैटर्न को संभालने के लिए DynamoDB का पूरक होगा। हम अपने उपयोगकर्ताओं को प्रासंगिक लेनदेन खोजने के लिए, या समय के साथ खर्च के रुझान देखने के लिए शक्तिशाली एकत्रीकरण करने के लिए समय, व्यापारी, श्रेणी या अन्य फ़ील्ड के आधार पर फ़िल्टर करने देंगे। Rockset Amazon DynamoDB का जैसे-जैसे हम इन पैटर्नों पर काम करते हैं, हम देखेंगे कि इनमें से प्रत्येक प्रणाली मौजूदा कार्य के लिए किस प्रकार उपयुक्त है। DynamoDB मुख्य OLTP संचालन में उत्कृष्टता प्राप्त करता है - एक व्यक्तिगत आइटम को पढ़ना या लिखना, या ज्ञात फ़िल्टर के आधार पर अनुक्रमिक आइटम की एक श्रृंखला प्राप्त करना। जिस तरह से यह प्राथमिक कुंजी के आधार पर डेटा को विभाजित करता है, उसके कारण DynamoDB किसी भी पैमाने पर इस प्रकार की क्वेरी के लिए लगातार प्रदर्शन प्रदान करने में सक्षम है। इसके विपरीत, रॉकसेट बड़ी मात्रा में डेटा के निरंतर अंतर्ग्रहण में उत्कृष्टता प्राप्त करता है और अत्यधिक चयनात्मक फ़िल्टरिंग, वास्तविक समय या क्वेरी-टाइम एकत्रीकरण और अन्य पैटर्न प्रदान करने के लिए उस डेटा पर कई अनुक्रमण रणनीतियों को नियोजित करता है जिन्हें डायनेमोडीबी आसानी से संभाल नहीं सकता है। जैसे ही हम इस उदाहरण के माध्यम से काम करते हैं, हम दोनों प्रणालियों में अंतर्निहित मूलभूत अवधारणाओं के साथ-साथ अपने लक्ष्यों को पूरा करने के लिए व्यावहारिक कदम भी सीखेंगे। आप उपयोग करके एप्लिकेशन का अनुसरण कर सकते हैं। GitHub रेपो का DynamoDB के साथ मुख्य सुविधाएँ लागू करना हम अपने एप्लिकेशन की मुख्य विशेषताओं को लागू करके यह पूर्वाभ्यास शुरू करेंगे। यह किसी भी एप्लिकेशन के लिए एक सामान्य प्रारंभिक बिंदु है, क्योंकि आप व्यक्तिगत रिकॉर्ड में हेरफेर करने और संबंधित रिकॉर्ड के एक सेट को सूचीबद्ध करने की क्षमता प्रदान करने के लिए मानक "सीआरयूडीएल" संचालन का निर्माण करते हैं। ई-कॉमर्स एप्लिकेशन के लिए, ऑर्डर देने और पिछले ऑर्डर देखने की यह कार्यक्षमता होगी। किसी सोशल मीडिया एप्लिकेशन के लिए, इसमें पोस्ट बनाना, मित्रों को जोड़ना, या उन लोगों को देखना शामिल होगा जिन्हें आप फ़ॉलो करते हैं। यह कार्यक्षमता आम तौर पर उन डेटाबेस द्वारा कार्यान्वित की जाती है जो वर्कफ़्लो में विशेषज्ञ होते हैं जो छोटी संख्या में पंक्तियों के विरुद्ध कई समवर्ती संचालन पर जोर देते हैं। ऑनलाइन ट्रांजेक्शनल प्रोसेसिंग (ओएलटीपी) इस उदाहरण के लिए, हम एक व्यवसाय वित्त एप्लिकेशन बना रहे हैं जहां उपयोगकर्ता भुगतान कर और प्राप्त कर सकता है, साथ ही अपने लेनदेन का इतिहास भी देख सकता है। इस वॉकथ्रू के लिए उदाहरण को जानबूझकर सरल बनाया जाएगा, लेकिन आप हमारे एप्लिकेशन के लिए तीन मुख्य एक्सेस पैटर्न के बारे में सोच सकते हैं: , जो व्यवसाय द्वारा किए गए या प्राप्त भुगतान का रिकॉर्ड संग्रहीत करेगा; लेन-देन रिकॉर्ड करें , जो उपयोगकर्ताओं को किसी व्यवसाय द्वारा किए गए और प्राप्त किए गए नवीनतम भुगतान देखने की अनुमति देगा; और दिनांक सीमा के अनुसार लेन-देन देखें , जो उपयोगकर्ता को एकल लेन-देन की बारीकियों को समझने की अनुमति देगा। व्यक्तिगत लेन-देन देखें इनमें से प्रत्येक एक्सेस पैटर्न एक महत्वपूर्ण, उच्च-मात्रा एक्सेस पैटर्न है। हम लगातार उपयोगकर्ताओं के लिए लेनदेन रिकॉर्ड करते रहेंगे, और जब वे एप्लिकेशन खोलेंगे तो लेनदेन फ़ीड पहला दृश्य होगा। इसके अलावा, इनमें से प्रत्येक एक्सेस पैटर्न प्रासंगिक रिकॉर्ड लाने के लिए ज्ञात, सुसंगत मापदंडों का उपयोग करेगा। हम इन एक्सेस पैटर्न को संभालने के लिए DynamoDB का उपयोग करेंगे। DynamoDB AWS द्वारा प्रदान किया गया एक NoSQL डेटाबेस है। यह पूरी तरह से प्रबंधित डेटाबेस है, और उच्च-स्तरीय अनुप्रयोगों और सर्वर रहित अनुप्रयोगों दोनों में इसकी लोकप्रियता बढ़ रही है। DynamoDB की सबसे अनोखी विशेषताओं में से एक यह है कि यह किसी भी पैमाने पर लगातार प्रदर्शन प्रदान करता है। चाहे आपकी तालिका 1 मेगाबाइट हो या 1 पेटाबाइट, आपको अपने परिचालन के लिए समान प्रतिक्रिया समय देखना चाहिए। यह कोर, ओएलटीपी उपयोग के मामलों के लिए एक वांछनीय गुणवत्ता है जैसे कि हम यहां लागू कर रहे हैं। यह एक महान और मूल्यवान इंजीनियरिंग उपलब्धि है, लेकिन यह समझना महत्वपूर्ण है कि यह उन प्रश्नों के प्रकार के बारे में चयनात्मक होकर हासिल किया गया है जो अच्छा प्रदर्शन करेंगे। DynamoDB दो मुख्य डिज़ाइन निर्णयों के माध्यम से यह सुसंगत प्रदर्शन प्रदान करने में सक्षम है। सबसे पहले, आपकी DynamoDB तालिका के प्रत्येक रिकॉर्ड में एक प्राथमिक कुंजी शामिल होनी चाहिए। यह प्राथमिक कुंजी एक विभाजन कुंजी के साथ-साथ एक वैकल्पिक सॉर्ट कुंजी से बनी होती है। DynamoDB के लिए दूसरा मुख्य डिज़ाइन निर्णय यह है कि एपीआई प्राथमिक कुंजी के उपयोग को भारी रूप से लागू करता है - इस पर बाद में और अधिक जानकारी दी जाएगी। नीचे दी गई छवि में, हमारे फिनटेक एप्लिकेशन में कुछ नमूना लेनदेन डेटा है। हमारी तालिका हमारे एप्लिकेशन में संगठन के नाम की एक विभाजन कुंजी, साथ ही एक -आधारित सॉर्ट कुंजी का उपयोग करती है जो यूयूआईडी की विशिष्टता विशेषताओं के साथ-साथ निर्माण समय के आधार पर क्रमबद्धता प्रदान करती है जो हमें समय-आधारित प्रश्न बनाने की अनुमति देती है। यूएलआईडी हमारी तालिका के रिकॉर्ड में व्यापारी का नाम, श्रेणी और राशि जैसी अन्य विशेषताएं शामिल हैं, जो हमारे एप्लिकेशन में उपयोगी हैं लेकिन DynamoDB के अंतर्निहित आर्किटेक्चर के लिए उतनी महत्वपूर्ण नहीं हैं। महत्वपूर्ण हिस्सा प्राथमिक कुंजी और विशेष रूप से विभाजन कुंजी में है। हुड के तहत, DynamoDB आपके डेटा को कई स्टोरेज विभाजनों में विभाजित करेगा, जिनमें से प्रत्येक में आपकी तालिका में डेटा का एक सबसेट होगा। DynamoDB किसी विशेष भंडारण विभाजन को दिए गए रिकॉर्ड को निर्दिष्ट करने के लिए प्राथमिक कुंजी के विभाजन कुंजी तत्व का उपयोग करता है। जैसे-जैसे आपकी तालिका में डेटा की मात्रा या आपकी तालिका के विरुद्ध ट्रैफ़िक बढ़ता है, DynamoDB आपके डेटाबेस को क्षैतिज रूप से स्केल करने के तरीके के रूप में विभाजन जोड़ देगा। जैसा कि ऊपर बताया गया है, DynamoDB के लिए दूसरा मुख्य डिज़ाइन निर्णय यह है कि एपीआई प्राथमिक कुंजी के उपयोग को भारी रूप से लागू करता है। DynamoDB में लगभग सभी API क्रियाओं के लिए कम से कम आपकी प्राथमिक कुंजी की विभाजन कुंजी की आवश्यकता होती है। इस वजह से, DynamoDB किसी भी अनुरोध को उचित भंडारण विभाजन पर तुरंत रूट करने में सक्षम है, चाहे विभाजन की संख्या और तालिका का कुल आकार कोई भी हो। इन दो ट्रेडऑफ़ के साथ, आपके द्वारा DynamoDB का उपयोग करने में आवश्यक रूप से सीमाएँ हैं। आपको अपने एक्सेस पैटर्न के लिए पहले से सावधानीपूर्वक योजना और डिज़ाइन करना चाहिए, क्योंकि आपकी प्राथमिक कुंजी आपके एक्सेस पैटर्न में शामिल होनी चाहिए। बाद में अपने एक्सेस पैटर्न को बदलना मुश्किल हो सकता है और इसके लिए कुछ मैन्युअल माइग्रेशन चरणों की आवश्यकता हो सकती है। जब आपके उपयोग के मामले DynamoDB की मुख्य दक्षताओं के अंतर्गत आते हैं, तो आपको लाभ मिलेगा। आपको सुसंगत, पूर्वानुमानित प्रदर्शन प्राप्त होगा, चाहे कोई भी पैमाना हो, और आप समय के साथ अपने आवेदन में दीर्घकालिक गिरावट नहीं देखेंगे। इसके अलावा, आपको कम परिचालन बोझ के साथ पूरी तरह से प्रबंधित अनुभव मिलेगा, जिससे आप इस बात पर ध्यान केंद्रित कर सकेंगे कि व्यवसाय के लिए क्या मायने रखता है। हमारे उदाहरण में मुख्य संचालन इस मॉडल के साथ पूरी तरह फिट बैठते हैं। किसी संगठन के लिए लेन-देन की फ़ीड पुनर्प्राप्त करते समय, हमारे पास हमारे एप्लिकेशन में संगठन आईडी उपलब्ध होगी जो हमें उसी विभाजन कुंजी के साथ रिकॉर्ड के एक संगत सेट को लाने के लिए डायनेमोडीबी ऑपरेशन का उपयोग करने की अनुमति देगी। किसी विशिष्ट लेनदेन पर अतिरिक्त विवरण प्राप्त करने के लिए, हमारे पास वांछित आइटम लाने के लिए DynamoDB अनुरोध करने के लिए संगठन आईडी और लेनदेन आईडी दोनों उपलब्ध होंगे। क्वेरी GetItem आप के साथ इन परिचालनों को क्रियान्वित होते हुए देख सकते हैं। एप्लिकेशन को तैनात करने और उसे नमूना डेटा के साथ जोड़ने के लिए निर्देशों का पालन करें। फिर, व्यक्तिगत उपयोगकर्ताओं के लिए लेनदेन फ़ीड लाने के लिए तैनात सेवा से HTTP अनुरोध करें। समवर्ती अनुरोधों की संख्या या आपकी DynamoDB तालिका के आकार की परवाह किए बिना ये ऑपरेशन तेज़, कुशल संचालन होंगे। नमूना एप्लिकेशन रॉकसेट के साथ DynamoDB का पूरक अब तक, हमने अपने मुख्य एक्सेस पैटर्न को संभालने के लिए DynamoDB का उपयोग किया है। DynamoDB इन पैटर्नों के लिए बहुत अच्छा है क्योंकि इसकी कुंजी-आधारित विभाजन किसी भी पैमाने पर लगातार प्रदर्शन प्रदान करेगा। हालाँकि, DynamoDB अन्य एक्सेस पैटर्न को संभालने में अच्छा नहीं है। DynamoDB आपको प्राथमिक कुंजी के अलावा अन्य विशेषताओं द्वारा कुशलतापूर्वक क्वेरी करने की अनुमति नहीं देता है। आप अपने डेटा को अतिरिक्त विशेषताओं द्वारा पुन: अनुक्रमित करने के लिए उपयोग कर सकते हैं, लेकिन यह तब भी समस्याग्रस्त हो सकता है यदि आपके पास कई अलग-अलग विशेषताएँ हैं जिनका उपयोग आपके डेटा को अनुक्रमित करने के लिए किया जा सकता है। DynamoDB के द्वितीयक अनुक्रमणिका का इसके अतिरिक्त, DynamoDB बॉक्स से बाहर कोई एकत्रीकरण कार्यक्षमता प्रदान नहीं करता है। आप DynamoDB का उपयोग करके अपने स्वयं के समुच्चय की गणना कर सकते हैं, लेकिन यह पहले से एकत्रीकरण के लिए डिज़ाइन किए गए समाधान की तुलना में कम लचीलेपन या अअनुकूलित पढ़ने की खपत के साथ हो सकता है। इन पैटर्न को संभालने के लिए, हम करेंगे। DynamoDB को Rockset के साथ पूरक रॉकसेट को आपके डेटा पर इंडेक्स के द्वितीयक सेट के रूप में सबसे अच्छा माना जाता है। रॉकसेट क्वेरी समय पर केवल इन इंडेक्स का उपयोग करता है और रीड के दौरान किसी भी लोड को डायनेमोडीबी में वापस प्रोजेक्ट नहीं करता है। आपके एप्लिकेशन क्लाइंट से व्यक्तिगत, लेन-देन संबंधी अपडेट के बजाय, रॉकसेट को आपके प्राथमिक डेटा स्टोर से निरंतर, स्ट्रीमिंग अंतर्ग्रहण के लिए डिज़ाइन किया गया है। इसमें DynamoDB, MongoDB, Kafka और कई रिलेशनल डेटाबेस सहित कई प्राथमिक डेटा स्टोर के लिए सीधे कनेक्टर हैं। जैसे ही रॉकसेट आपके प्राथमिक डेटाबेस से डेटा ग्रहण करता है, तो यह आपके डेटा को एक में अनुक्रमित करता है, जो अवधारणाओं को उधार लेता है: एक पंक्ति सूचकांक, एक उलटा सूचकांक और एक स्तंभ सूचकांक। अतिरिक्त अनुक्रमित, जैसे श्रेणी, प्रकार और भू-स्थानिक, अंतर्ग्रहण किए गए डेटा प्रकारों के आधार पर स्वचालित रूप से बनाए जाते हैं। हम नीचे इन सूचकांकों की विशिष्टताओं पर चर्चा करेंगे, लेकिन यह परिवर्तित सूचकांक आपके डेटा पर अधिक लचीले एक्सेस पैटर्न की अनुमति देता है। कन्वर्ज्ड इंडेक्स रॉकसेट के पीछे यह मूल अवधारणा है - यह आपके प्राथमिक डेटास्टोर से पूरी तरह से प्रबंधित, लगभग वास्तविक समय अंतर्ग्रहण पाइपलाइन का उपयोग करके आपके डेटा पर एक द्वितीयक सूचकांक है। टीमें लंबे समय से अतिरिक्त उपयोग के मामलों को संभालने के लिए दूसरे सिस्टम में डालने के लिए डायनेमोडीबी से डेटा निकाल रही हैं। इससे पहले कि हम यह बताएं कि रॉकसेट आपकी तालिका से डेटा कैसे ग्रहण करता है, आइए संक्षेप में चर्चा करें कि रॉकसेट इस क्षेत्र में अन्य विकल्पों से कैसे भिन्न है। रॉकसेट और अन्य दृष्टिकोणों के बीच कुछ मुख्य अंतर हैं। सबसे पहले, रॉकसेट पूरी तरह से प्रबंधित है। न केवल आपको डेटाबेस बुनियादी ढांचे का प्रबंधन करने की आवश्यकता नहीं है, बल्कि आपको डेटा को रॉकसेट में निकालने, बदलने और लोड करने के लिए पाइपलाइन को बनाए रखने की भी आवश्यकता नहीं है। कई अन्य समाधानों के साथ, आप अपने सिस्टम के बीच "गोंद" कोड के प्रभारी हैं। ये प्रणालियाँ महत्वपूर्ण हैं फिर भी विफलता-संभावित हैं, क्योंकि आपको डेटा संरचना में किसी भी बदलाव के प्रति रक्षात्मक रूप से सावधान रहना होगा। अपस्ट्रीम परिवर्तनों के परिणामस्वरूप इन प्रणालियों को बनाए रखने वालों के लिए डाउनस्ट्रीम में दर्द हो सकता है। दूसरे, रॉकसेट वास्तविक समय के डेटा को परिवर्तनशील तरीके से संभाल सकता है। कई अन्य प्रणालियों के साथ, आपको एक या दूसरा मिलता है। आप अपने डेटा का आवधिक निर्यात और बल्क-लोड करना चुन सकते हैं, लेकिन इसके परिणामस्वरूप लोड के बीच डेटा पुराना हो जाता है। वैकल्पिक रूप से, आप डेटा को अपने डेटा वेयरहाउस में केवल-अनुलग्नक तरीके से स्ट्रीम कर सकते हैं, लेकिन आप बदलते डेटा पर इन-प्लेस अपडेट नहीं कर सकते हैं। रॉकसेट मौजूदा आइटमों पर अपडेट को तेज़ी से और कुशलता से संभालने में सक्षम है क्योंकि यह नया डेटा डालता है और इस प्रकार आपको अपने बदलते डेटा पर वास्तविक समय में नज़र डाल सकता है। तीसरा, रॉकसेट अपने इंडेक्स स्वचालित रूप से उत्पन्न करता है। अन्य 'पूरी तरह से प्रबंधित' समाधानों के लिए आपको अभी भी इंडेक्स को कॉन्फ़िगर करने की आवश्यकता होती है क्योंकि आपको नई क्वेरी का समर्थन करने के लिए उनकी आवश्यकता होती है। रॉकसेट का क्वेरी इंजन किसी भी और सभी प्रश्नों का समर्थन करने के लिए इंडेक्स के एक सेट का उपयोग करने के लिए डिज़ाइन किया गया है। जैसे-जैसे आप अपने सिस्टम में अधिक से अधिक प्रश्न जोड़ते हैं, आपको अधिक से अधिक स्थान और कम्प्यूटेशनल संसाधन लेने के लिए अतिरिक्त अनुक्रमणिका जोड़ने की आवश्यकता नहीं होती है। इसका मतलब यह भी है कि तदर्थ प्रश्न अनुक्रमणिका का पूरी तरह से लाभ उठा सकते हैं, जिससे उन्हें समर्थन देने के लिए किसी व्यवस्थापक द्वारा विशेष सूचकांक जोड़ने की प्रतीक्षा किए बिना तेज़ बनाया जा सकता है। रॉकसेट डायनेमोडीबी से डेटा कैसे ग्रहण करता है अब जब हम मूल बातें जानते हैं कि रॉकसेट क्या है और यह हमारी कैसे मदद करता है, तो आइए अपनी डायनेमोडीबी तालिका को रॉकसेट से कनेक्ट करें। ऐसा करने पर, हम सीखेंगे कि रॉकसेट अंतर्ग्रहण प्रक्रिया कैसे काम करती है और यह अन्य विकल्पों से कैसे भिन्न है। रॉकसेट में कई डेटा स्रोतों के लिए उद्देश्य-निर्मित कनेक्टर हैं, और विशिष्ट कनेक्टर कार्यान्वयन अपस्ट्रीम डेटा स्रोत की विशिष्टताओं पर निर्भर करता है। DynamoDB से जुड़ने के लिए, Rockset पर निर्भर करता है। DynamoDB स्ट्रीम, DynamoDB की एक परिवर्तन डेटा कैप्चर सुविधा है जहां DynamoDB तालिका के विरुद्ध प्रत्येक लेखन ऑपरेशन का विवरण स्ट्रीम में दर्ज किया जाता है। स्ट्रीम के उपभोक्ता इन परिवर्तनों को उसी क्रम में संसाधित कर सकते हैं जिस क्रम में वे डाउनस्ट्रीम सिस्टम को अपडेट करने के लिए तालिका के विरुद्ध हुए थे। DynamoDB स्ट्रीम वास्तविक समय में डायनेमोडीबी तालिका के साथ अपडेट रहने के लिए रॉकसेट के लिए डायनेमोडीबी स्ट्रीम बहुत बढ़िया है, लेकिन यह पूरी कहानी नहीं है। डायनेमोडीबी स्ट्रीम में केवल लेखन कार्यों के रिकॉर्ड होते हैं जो टेबल पर स्ट्रीम सक्षम होने के बाद हुए थे। इसके अलावा, एक । स्ट्रीम सक्षम होने से पहले या 24 घंटे से अधिक समय पहले हुए ऑपरेशन स्ट्रीम में मौजूद नहीं होंगे। DynamoDB स्ट्रीम केवल 24 घंटों के लिए रिकॉर्ड बरकरार रखती है लेकिन आपके प्रश्नों का सही उत्तर देने के लिए रॉकसेट को न केवल नवीनतम डेटा की आवश्यकता है, बल्कि आपके डेटाबेस के सभी डेटा की भी आवश्यकता है। इसे संभालने के लिए, यह आपकी तालिका की प्रारंभिक स्थिति को समझने के लिए एक प्रारंभिक थोक निर्यात करता है (या तो डायनेमोडीबी स्कैन का उपयोग करके या आपकी तालिका के आकार के आधार पर )। S3 पर निर्यात करता है इस प्रकार, रॉकसेट की डायनेमोडीबी कनेक्शन प्रक्रिया के दो भाग हैं: रॉकसेट में अंतर्ग्रहण के लिए अपनी पूरी तालिका निर्यात करने के लिए एक प्रारंभिक, प्रक्रिया; बूटस्ट्रैपिंग आपके डायनेमोडीबी स्ट्रीम से अपडेट का उपभोग करने और रॉकसेट में डेटा को अपडेट करने की एक बाद की, प्रक्रिया। निरंतर ध्यान दें कि ये दोनों प्रक्रियाएं पूरी तरह से रॉकसेट द्वारा प्रबंधित हैं और एक उपयोगकर्ता के रूप में आपके लिए पारदर्शी हैं। आप इन पाइपलाइनों के रखरखाव और कोई त्रुटि होने पर अलर्ट का जवाब देने के प्रभारी नहीं होंगे। इसके अलावा, यदि आप प्रारंभिक अंतर्ग्रहण प्रक्रिया के लिए S3 निर्यात विधि चुनते हैं, तो कोई भी रॉकसेट अंतर्ग्रहण प्रक्रिया आपकी मुख्य तालिका से पढ़ने की क्षमता इकाइयों का उपभोग नहीं करेगी। इस प्रकार, रॉकसेट आपके एप्लिकेशन उपयोग मामलों से खपत नहीं लेगा या उत्पादन उपलब्धता को प्रभावित नहीं करेगा। अनुप्रयोग: DynamoDB को रॉकसेट से जोड़ना हमारे एप्लिकेशन में रॉकसेट का उपयोग करने से पहले, आइए रॉकसेट को हमारी डायनेमोडीबी तालिका से कनेक्ट करें। सबसे पहले, हमें रॉकसेट और हमारी टेबल के बीच एक नया एकीकरण बनाने की आवश्यकता है। हम नीचे दिए गए उच्च-स्तरीय चरणों से गुजरेंगे, लेकिन यदि आवश्यक हो तो आप पा सकते हैं। एप्लिकेशन रिपॉजिटरी में अधिक विस्तृत चरण-दर-चरण निर्देश रॉकसेट कंसोल में, इस प्रक्रिया को शुरू करने के लिए पर जाएँ। नए एकीकरण विज़ार्ड एकीकरण विज़ार्ड में, अपने एकीकरण प्रकार के रूप में चुनें। फिर, अगले चरण पर जाने के लिए पर क्लिक करें। Amazon DynamoDB स्टार्ट DynamoDB एकीकरण विज़ार्ड में रॉकसेट को आपकी DynamoDB तालिका तक पहुंचने के लिए अधिकृत करने के लिए चरण-दर-चरण निर्देश हैं। इसके लिए आपके टेबल निर्यात के लिए एक IAM नीति, एक IAM भूमिका और एक S3 बकेट बनाने की आवश्यकता है। यदि आप चाहें तो संसाधनों को मैन्युअल रूप से बनाने के लिए आप उन निर्देशों का पालन कर सकते हैं। सर्वर रहित दुनिया में, हम जितना संभव हो सके के माध्यम से चीजें बनाना पसंद करते हैं, और इसमें ये सहायक संसाधन शामिल हैं। बुनियादी ढांचे-ए-कोड उदाहरण भंडार में रॉकसेट एकीकरण संसाधन बनाने के लिए आवश्यक बुनियादी ढांचे-ए-कोड शामिल हैं। इनका उपयोग करने के लिए, पहले रॉकसेट एकीकरण विज़ार्ड के नीचे रॉकसेट खाता आईडी और बाहरी आईडी मान ढूंढें। इन मानों को सर्वरलेस.yml फ़ाइल के ब्लॉक में कॉपी और पेस्ट करें। फिर, इन संसाधनों को बनाने के लिए । custom के प्रासंगिक अनुभागों सर्वर रहित.yml की पंक्ति 71 से 122 पर संसाधनों को अनटिप्पणी करें इन नए संसाधनों को बनाने के लिए अपने एप्लिकेशन को पुनः तैनात करें। परिनियोजन से आउटपुट में, S3 बकेट नाम और IAM भूमिका ARN को रॉकसेट कंसोल में उचित स्थानों पर कॉपी और पेस्ट करें। फिर, अपने एकीकरण को सहेजने के लिए एकीकरण सहेजें बटन पर क्लिक करें। अपना एकीकरण बनाने के बाद, आपको एकीकरण से एक बनाने की आवश्यकता होगी। रॉकसेट कंसोल में पर जाएँ और संग्रह बनाने के लिए अपने एकीकरण का उपयोग करने के लिए चरणों का पालन करें। आप एप्लिकेशन रिपॉजिटरी में भी पा सकते हैं। रॉकसेट संग्रह संग्रह निर्माण विज़ार्ड संग्रह बनाने के लिए चरण-दर-चरण निर्देश एक बार जब आप इस कनेक्शन को पूरा कर लेते हैं, तो आम तौर पर, उचित आकार के इंस्टेंस के सेट पर, DynamoDB में डेटा को सम्मिलित करना, अपडेट करना या हटाना रॉकसेट के इंडेक्स में दिखाई देगा और 2 सेकंड से भी कम समय में क्वेरी के लिए उपलब्ध होगा। जटिल फ़िल्टरिंग के लिए रॉकसेट का उपयोग करना अब जब हमने रॉकसेट को अपनी डायनेमोडीबी तालिका से जोड़ दिया है, तो आइए देखें कि रॉकसेट हमारे मौजूदा डेटा पर नए एक्सेस पैटर्न को कैसे सक्षम कर सकता है। हमारे मुख्य फीचर अनुभाग से याद करें कि DynamoDB आपकी प्राथमिक कुंजियों पर अत्यधिक केंद्रित है। अपने डेटा तक कुशलतापूर्वक पहुंचने के लिए आपको अपनी प्राथमिक कुंजी का उपयोग करना चाहिए। तदनुसार, हमने अपनी प्राथमिक कुंजी में संगठन के नाम और लेनदेन समय का उपयोग करने के लिए अपनी तालिका को संरचित किया। यह संरचना हमारे मुख्य एक्सेस पैटर्न के लिए काम करती है, लेकिन हम उपयोगकर्ताओं को उनके लेनदेन को ब्राउज़ करने के लिए अधिक लचीला तरीका प्रदान करना चाह सकते हैं। कई उपयोगी विशेषताएँ हैं - श्रेणी, व्यापारी का नाम, राशि, आदि - जो फ़िल्टर करने में उपयोगी हो सकती हैं। हम अधिक विशेषताओं पर फ़िल्टरिंग सक्षम करने के लिए डायनेमोडीबी के द्वितीयक इंडेक्स का उपयोग कर सकते हैं, लेकिन यह अभी भी यहां उपयुक्त नहीं है। DynamoDB की प्राथमिक कुंजी संरचना आसानी से लचीली क्वेरी की अनुमति नहीं देती है जिसमें कई वैकल्पिक विशेषताओं का संयोजन शामिल होता है। आपके पास व्यापारी के नाम और तारीख के आधार पर फ़िल्टर करने के लिए एक द्वितीयक सूचकांक हो सकता है, लेकिन यदि आप व्यापारी के नाम, दिनांक और राशि के आधार पर फ़िल्टर करने की अनुमति देना चाहते हैं तो आपको एक अन्य द्वितीयक सूचकांक की आवश्यकता होगी। एक एक्सेस पैटर्न जो श्रेणी पर फ़िल्टर करता है उसे तीसरे माध्यमिक सूचकांक की आवश्यकता होगी। उस जटिलता से निपटने के बजाय, हम यहां रॉकसेट पर निर्भर रहेंगे। हमने पहले देखा कि रॉकसेट आपके डेटा को कई तरीकों से अनुक्रमित करने के लिए एक कन्वर्ज्ड इंडेक्स का उपयोग करता है। उन तरीकों में से एक उलटा सूचकांक है। एक उल्टे सूचकांक के साथ, रॉकसेट प्रत्येक विशेषता को सीधे अनुक्रमित करता है। ध्यान दें कि यह सूचकांक कैसे व्यवस्थित है। प्रत्येक विशेषता नाम और मान का उपयोग सूचकांक की कुंजी के रूप में किया जाता है, और मान दस्तावेज़ आईडी की एक सूची है जिसमें संबंधित विशेषता नाम और मान शामिल होते हैं। कुंजियाँ इसलिए बनाई जाती हैं ताकि उनका प्राकृतिक क्रम क्रम श्रेणी प्रश्नों का कुशलतापूर्वक समर्थन कर सके। एक उलटा सूचकांक उन प्रश्नों के लिए बहुत अच्छा है जिनमें चयनात्मक फ़िल्टर स्थितियाँ होती हैं। कल्पना कीजिए कि हम अपने उपयोगकर्ताओं को कुछ मानदंडों से मेल खाने वाले लेनदेन को खोजने के लिए अपने लेनदेन को फ़िल्टर करने की अनुमति देना चाहते हैं। वांडेले इंडस्ट्रीज संगठन में किसी की दिलचस्पी इस बात में है कि उन्होंने हाल ही में कितनी बार चिपोटल का ऑर्डर दिया है। आप इसे इस प्रकार एक प्रश्न के साथ पा सकते हैं: SELECT * FROM transactions WHERE organization = 'Vandelay Industries' AND merchant_name = 'Chipotle' क्योंकि हम ग्राहक और व्यापारी के नाम पर चयनात्मक फ़िल्टर कर रहे हैं, हम मेल खाने वाले दस्तावेज़ों को शीघ्रता से ढूंढने के लिए उल्टे सूचकांक का उपयोग कर सकते हैं। मिलान दस्तावेजों की सूची खोजने के लिए रॉकसेट उल्टे सूचकांक में विशेषता नाम और मूल्य जोड़े दोनों को देखेगा। एक बार जब इसमें ये दो सूचियाँ हो जाती हैं, तो यह उन्हें रिकॉर्ड के सेट को खोजने के लिए मर्ज कर सकता है जो दोनों स्थितियों के सेट से मेल खाता है, और परिणाम क्लाइंट को वापस लौटा सकता है। जैसे डायनेमोडीबी की विभाजन-आधारित अनुक्रमणिका विभाजन कुंजी का उपयोग करने वाले संचालन के लिए कुशल है, रॉकसेट का उलटा सूचकांक आपको अपने डेटा सेट में किसी भी फ़ील्ड पर कुशल लुकअप देता है, यहां तक कि एम्बेडेड ऑब्जेक्ट्स की विशेषताओं पर या एम्बेडेड सरणी के अंदर मानों पर भी। एप्लिकेशन: अपने एप्लिकेशन में रॉकसेट एपीआई का उपयोग करना अब जब हम जानते हैं कि रॉकसेट हमारे डेटासेट के विरुद्ध चयनात्मक प्रश्नों को कुशलतापूर्वक कैसे निष्पादित कर सकता है, तो आइए रॉकसेट प्रश्नों को हमारे एप्लिकेशन में एकीकृत करने के व्यावहारिक पहलुओं पर चलते हैं। रॉकसेट RESTful सेवाओं को उजागर करता है जो एक प्राधिकरण टोकन द्वारा संरक्षित हैं। SDK लोकप्रिय प्रोग्रामिंग भाषाओं के लिए भी उपलब्ध हैं। यह इसे सर्वर रहित अनुप्रयोगों के साथ एकीकृत करने के लिए बहुत उपयुक्त बनाता है क्योंकि आपको अपने डेटाबेस तक पहुंचने के लिए जटिल निजी नेटवर्किंग कॉन्फ़िगरेशन सेट करने की आवश्यकता नहीं है। हमारे एप्लिकेशन में रॉकसेट एपीआई के साथ इंटरैक्ट करने के लिए, हमें रॉकसेट एपीआई कुंजी की आवश्यकता होगी। आप रॉकसेट कंसोल के में एक बना सकते हैं। एक बार जब आप ऐसा कर लें, तो इसके मान को अपनी सर्वर रहित.yml फ़ाइल में कॉपी करें और इसे अपने एप्लिकेशन पर उपलब्ध कराने के लिए पुनः तैनात करें। एपीआई कुंजी अनुभाग साइड नोट: सरलता के लिए, हम इस एपीआई कुंजी को एक पर्यावरण चर के रूप में उपयोग कर रहे हैं। एक वास्तविक एप्लिकेशन में, आपको अपने रहस्य को संग्रहीत करने और पर्यावरण चर से बचने के लिए या जैसी किसी चीज़ का उपयोग करना चाहिए। पैरामीटर स्टोर एडब्ल्यूएस सीक्रेट मैनेजर यह देखने के लिए कि हम रॉकसेट एपीआई के साथ कैसे इंटरैक्ट करते हैं, हमारी देखें। क्लास आरंभीकरण एक रॉकसेट क्लाइंट ऑब्जेक्ट में होता है जिसका उपयोग रॉकसेट पर कॉल करने के लिए किया जाएगा। ट्रांजेक्शन सर्विस क्लास में, हमारे पास रॉकसेट के साथ इंटरैक्ट करने के लिए निम्नलिखित क्वेरी है: हमारी सेवा कक्षा में फ़िल्टरट्रांसएक्शन विधि const response = await this._rocksetClient.queries.query({ sql: { query: ` SELECT * FROM Transactions WHERE organization = :organization AND category = :category AND amount BETWEEN :minAmount AND :maxAmount ORDER BY transactionTime DESC LIMIT 20`, parameters: [ { name: "organization", type: "string", value: organization, }, { name: "category", type: "string", value: category, }, { name: "minAmount", type: "float", value: minAmount, }, { name: "maxAmount", type: "float", value: maxAmount, }, ], }, }); इस बातचीत के बारे में ध्यान देने योग्य दो बातें हैं। सबसे पहले, हम उपयोगकर्ताओं से इनपुट संभालते समय अपनी क्वेरी में नामित पैरामीटर का उपयोग कर रहे हैं। SQL इंजेक्शन हमलों से बचने के लिए SQL डेटाबेस के साथ यह एक सामान्य अभ्यास है। दूसरा, SQL कोड हमारे एप्लिकेशन कोड के साथ मिश्रित होता है, और समय के साथ इसे ट्रैक करना मुश्किल हो सकता है। हालाँकि यह काम कर सकता है, लेकिन एक बेहतर तरीका भी है। जैसे ही हम अपना अगला उपयोग मामला लागू करेंगे, हम देखेंगे कि हमारे एप्लिकेशन में रॉकसेट क्वेरी लैम्ब्डा का उपयोग कैसे करें। एकत्रीकरण के लिए रॉकसेट का उपयोग करना इस बिंदु पर, हमने इस बात पर चर्चा करते हुए डायनेमोडीबी और रॉकसेट की अनुक्रमण रणनीतियों की समीक्षा की है कि कैसे डेटाबेस एक व्यक्तिगत रिकॉर्ड या रिकॉर्ड का सेट ढूंढ सकता है जो एक विशेष फ़िल्टर विधेय से मेल खाता है। उदाहरण के लिए, हमने देखा कि DynamoDB आपको रिकॉर्ड खोजने के लिए प्राथमिक कुंजी का उपयोग करने के लिए प्रेरित करता है, जबकि रॉकसेट का उलटा सूचकांक अत्यधिक-चयनात्मक फ़िल्टर स्थितियों का उपयोग करके कुशलतापूर्वक रिकॉर्ड ढूंढ सकता है। इस अंतिम अनुभाग में, हम सीधे अनुक्रमण के बजाय डेटा लेआउट पर ध्यान केंद्रित करने के लिए गियर को थोड़ा बदल देंगे। डेटा लेआउट के बारे में सोचते समय, हम दो दृष्टिकोणों की तुलना करेंगे: पंक्ति-आधारित बनाम स्तंभ-आधारित। पंक्ति-आधारित डेटाबेस, जैसा कि नाम से पता चलता है, अपने डेटा को डिस्क पर पंक्तियों में व्यवस्थित करते हैं। अधिकांश रिलेशनल डेटाबेस, जैसे PostgreSQL और MySQL, पंक्ति-आधारित डेटाबेस हैं। ऐसे ही कई NoSQL डेटाबेस हैं, जैसे DynamoDB, भले ही उनके रिकॉर्ड तकनीकी रूप से रिलेशनल डेटाबेस अर्थ में "पंक्तियाँ" न हों। पंक्ति-आधारित डेटाबेस हमारे द्वारा अब तक देखे गए एक्सेस पैटर्न के लिए बहुत अच्छे हैं। कुछ फ़िल्टर शर्तों के अनुसार किसी व्यक्तिगत लेन-देन को उसकी आईडी या लेन-देन के सेट के आधार पर लाते समय, हम आम तौर पर चाहते हैं कि प्रत्येक लेन-देन के लिए सभी फ़ील्ड वापस आ जाएँ। क्योंकि रिकॉर्ड के सभी फ़ील्ड एक साथ संग्रहीत होते हैं, इसलिए रिकॉर्ड को वापस करने के लिए आम तौर पर एक बार पढ़ने की आवश्यकता होती है। (नोट: इस पर कुछ बारीकियाँ थोड़ी सी आ रही हैं)। एकत्रीकरण पूरी तरह से एक अलग कहानी है। एकत्रीकरण प्रश्नों के साथ, हम कुल गणना करना चाहते हैं - सभी लेनदेन की गिनती, लेनदेन के कुल योग का योग, या लेनदेन के एक सेट के लिए महीने का औसत खर्च। वांडेले इंडस्ट्रीज संगठन के उपयोगकर्ता के पास लौटते हुए, कल्पना करें कि वे पिछले तीन महीनों को देखना चाहते हैं और प्रत्येक महीने के लिए श्रेणी के अनुसार कुल खर्च का पता लगाना चाहते हैं। उस क्वेरी का एक सरलीकृत संस्करण इस प्रकार दिखेगा: SELECT category, EXTRACT(month FROM transactionTime) AS month, sum(amount) AS amount FROM transactions WHERE organization = 'Vandelay Industries' AND transactionTime > CURRENT_TIMESTAMP() - INTERVAL 3 MONTH GROUP BY category, month ORDER BY category, month DESC इस क्वेरी के लिए, परिणाम की गणना करने के लिए बड़ी संख्या में रिकॉर्ड पढ़ने की आवश्यकता हो सकती है। हालाँकि, ध्यान दें कि हमें अपने प्रत्येक रिकॉर्ड के लिए कई फ़ील्ड की आवश्यकता नहीं है। इस परिणाम को निर्धारित करने के लिए हमें केवल चार - श्रेणी, लेनदेन समय, संगठन और राशि - की आवश्यकता है। इस प्रकार, इस क्वेरी को संतुष्ट करने के लिए न केवल हमें बहुत अधिक रिकॉर्ड पढ़ने की आवश्यकता है, बल्कि हमारा पंक्ति-आधारित लेआउट उन फ़ील्ड का एक समूह भी पढ़ेगा जो हमारे परिणाम के लिए अनावश्यक हैं। इसके विपरीत, एक कॉलम-आधारित लेआउट डिस्क पर डेटा को कॉलम में संग्रहीत करता है। रॉकसेट का कन्वर्ज्ड इंडेक्स कॉलम-आधारित लेआउट में डेटा संग्रहीत करने के लिए कॉलमर इंडेक्स का उपयोग करता है। कॉलम-आधारित लेआउट में, डेटा को कॉलम द्वारा एक साथ संग्रहीत किया जाता है। अनुक्रमण के लिए एक व्यक्तिगत रिकॉर्ड को उसके घटक स्तंभों में विभाजित किया जाता है। यदि मेरी क्वेरी को बड़ी संख्या में रिकॉर्ड के लिए "राशि" विशेषता को जोड़ने के लिए एक एकत्रीकरण करने की आवश्यकता है, तो रॉकसेट केवल स्तंभ सूचकांक के "राशि" भाग को स्कैन करके ऐसा कर सकता है। यह पंक्ति-आधारित लेआउट की तुलना में पढ़ने और संसाधित किए गए डेटा की मात्रा को काफी कम कर देता है। ध्यान दें कि, डिफ़ॉल्ट रूप से, रॉकसेट का स्तंभ सूचकांक किसी कॉलम के भीतर विशेषताओं को क्रमबद्ध नहीं करेगा। क्योंकि हमारे पास उपयोगकर्ता-सामना वाले उपयोग के मामले हैं जो किसी विशेष ग्राहक के डेटा पर काम करेंगे, हम कॉलमर इंडेक्स का उपयोग करते समय स्कैन करने के लिए डेटा की मात्रा को कम करने के लिए ग्राहक द्वारा हमारे कॉलमर इंडेक्स को व्यवस्थित करना पसंद करेंगे। इसमें मदद के लिए रॉकसेट प्रदान करता है। क्लस्टरिंग के साथ, हम यह संकेत दे सकते हैं कि हम चाहते हैं कि हमारे स्तंभ सूचकांक को "संगठन" विशेषता द्वारा क्लस्टर किया जाए। यह संगठन द्वारा सभी कॉलम मानों को कॉलमर इंडेक्स के भीतर समूहित करेगा। इस प्रकार, जब वांडेले इंडस्ट्रीज अपने डेटा पर एकत्रीकरण कर रही है, तो रॉकसेट का क्वेरी प्रोसेसर अन्य ग्राहकों के लिए कॉलमर इंडेक्स के हिस्सों को छोड़ सकता है। आपके कॉलमर इंडेक्स पर डेटा क्लस्टरिंग रॉकसेट का पंक्ति-आधारित सूचकांक प्रसंस्करण में कैसे मदद करता है इससे पहले कि हम अपने एप्लिकेशन में कॉलमर इंडेक्स का उपयोग करने के लिए आगे बढ़ें, मैं रॉकसेट के कन्वर्ज्ड इंडेक्स के दूसरे पहलू के बारे में बात करना चाहता हूं। पहले, मैंने उल्लेख किया था कि पूर्ण रिकॉर्ड पुनर्प्राप्त करते समय पंक्ति-आधारित लेआउट का उपयोग किया गया था और संकेत दिया था कि डायनेमोडीबी और हमारे रॉकसेट इनवर्टेड-इंडेक्स क्वेरीज़ दोनों इन लेआउट का उपयोग कर रहे थे। यह केवल आंशिक रूप से सत्य है। इनवर्टेड इंडेक्स में कॉलम-आधारित इंडेक्स के साथ कुछ समानताएं होती हैं, क्योंकि यह किसी भी विशेषता द्वारा कुशल लुकअप के लिए कॉलम नाम और मानों को एक साथ संग्रहीत करता है। प्रत्येक सूचकांक प्रविष्टि में रिकॉर्ड की आईडी के लिए एक सूचक शामिल होता है जिसमें दिए गए कॉलम नाम और मान संयोजन शामिल होते हैं। एक बार उल्टे सूचकांक से प्रासंगिक आईडी या आईडी की खोज हो जाने पर, रॉकसेट पंक्ति सूचकांक का उपयोग करके पूरा रिकॉर्ड पुनर्प्राप्त कर सकता है। डेटा भंडारण आकार को कम करने के लिए रॉकसेट शब्दकोश एन्कोडिंग और अन्य उन्नत संपीड़न तकनीकों का उपयोग करता है। इस प्रकार, अब हमने देखा है कि रॉकसेट का अभिसरण सूचकांक एक साथ कैसे फिट बैठता है: उपयोग एकत्रीकरण के लिए किसी विशेष कॉलम में बड़ी संख्या में मानों को तुरंत स्कैन करने के लिए किया जाता है; कॉलम-आधारित इंडेक्स का उपयोग किसी भी स्तंभ नाम और मान पर चयनात्मक फ़िल्टर के लिए किया जाता है; उल्टे सूचकांक का उपयोग किसी भी अतिरिक्त विशेषताओं को लाने के लिए किया जाता है जिन्हें प्रक्षेपण खंड में संदर्भित किया जा सकता है। पंक्ति-आधारित सूचकांक का हुड के तहत, रॉकसेट का शक्तिशाली अनुक्रमण और क्वेरी इंजन आपके डेटा पर आंकड़ों को ट्रैक कर रहा है और आपकी क्वेरी को कुशलतापूर्वक निष्पादित करने के लिए इष्टतम योजनाएं तैयार कर रहा है। अनुप्रयोग: अपने एप्लिकेशन में रॉकसेट क्वेरी लैम्ब्डा का उपयोग करना आइए हमारी रॉकसेट एकत्रीकरण क्वेरी को लागू करें जो स्तंभ सूचकांक का उपयोग करती है। हमारी पिछली क्वेरी के लिए, हमने अपनी SQL क्वेरी सीधे रॉकसेट एपीआई पर लिखी थी। हालाँकि कुछ उच्च अनुकूलन योग्य उपयोगकर्ता इंटरफ़ेस से ऐसा करना सही बात है, लेकिन SQL कोड अधिक स्थिर होने पर एक बेहतर विकल्प होता है। हम अपने एप्लिकेशन लॉजिक के बीच में अपने अव्यवस्थित SQL कोड को बनाए रखने से बचना चाहेंगे। इसमें मदद के लिए, रॉकसेट में क्वेरी लैम्बडास नामक एक सुविधा है। क्वेरी लैम्ब्डा को नाम दिया गया है, संस्करणित किया गया है, पैरामीटरयुक्त क्वेरीज़ हैं जो रॉकसेट कंसोल में पंजीकृत हैं। रॉकसेट में क्वेरी लैम्ब्डा को कॉन्फ़िगर करने के बाद, आपको क्वेरी लैम्ब्डा के लिए एक पूरी तरह से प्रबंधित, स्केलेबल एंडपॉइंट प्राप्त होगा जिसे आप रॉकसेट द्वारा निष्पादित करने के लिए अपने पैरामीटर के साथ कॉल कर सकते हैं। इसके अलावा, आपको प्रत्येक क्वेरी लैम्ब्डा के लिए निगरानी आँकड़े भी मिलेंगे, ताकि आप ट्रैक कर सकें कि परिवर्तन करते समय आपकी क्वेरी लैम्ब्डा कैसा प्रदर्शन कर रही है। आप सकते हैं, लेकिन आइए अपनी एकत्रीकरण क्वेरी को संभालने के लिए अपनी पहली क्वेरी लैम्ब्डा सेट करें। । यहां क्वेरी लैम्ब्डा के बारे में अधिक जान संपूर्ण पूर्वाभ्यास एप्लिकेशन रिपॉजिटरी में पाया जा सकता है रॉकसेट कंसोल के पर जाएँ। निम्नलिखित क्वेरी को संपादक में चिपकाएँ: क्वेरी संपादक अनुभाग SELECT category, EXTRACT( month FROM transactionTime ) as month, EXTRACT( year FROM transactionTime ) as year, TRUNCATE(sum(amount), 2) AS amount FROM Transactions WHERE organization = :organization AND transactionTime > CURRENT_TIMESTAMP() - INTERVAL 3 MONTH GROUP BY category, month, year ORDER BY category, month, year DESC यह क्वेरी किसी दिए गए संगठन के लिए पिछले तीन महीनों के लेनदेन को दी गई श्रेणी और लेनदेन के महीने के आधार पर बकेट में समूहित करेगी। फिर, यह प्रत्येक महीने के दौरान खर्च की गई कुल राशि का पता लगाने के लिए महीने के हिसाब से एक श्रेणी के मूल्यों का योग करेगा। ध्यान दें कि इसमें "संगठन" विशेषता के लिए एक पैरामीटर शामिल है, जैसा कि क्वेरी में ":संगठन" सिंटैक्स द्वारा दर्शाया गया है। यह इंगित करता है कि क्वेरी को निष्पादित करने के लिए एक संगठन मान को पारित किया जाना चाहिए। रॉकसेट कंसोल में क्वेरी को क्वेरी लैम्ब्डा के रूप में सहेजें। फिर, देखें। यह क्वेरी लैम्ब्डा को नाम से बुलाता है और उपयोगकर्ता द्वारा दी गई "संगठन" संपत्ति को पास कर देता है। हमारे TransactionService वर्ग में FetchTransactionsByCategoryAndMonth कोड को यह हमारे एप्लिकेशन में संभालने के लिए बहुत सरल कोड है। इसके अलावा, रॉकसेट प्रत्येक क्वेरी लैम्ब्डा के लिए संस्करण नियंत्रण और क्वेरी-विशिष्ट निगरानी प्रदान करता है। इससे समय के साथ आपके प्रश्नों को बनाए रखना और यह समझना आसान हो जाता है कि क्वेरी सिंटैक्स में परिवर्तन प्रदर्शन को कैसे प्रभावित करते हैं। निष्कर्ष इस पोस्ट में, हमने देखा कि अपने उपयोगकर्ताओं के लिए तेज़, आनंददायक एप्लिकेशन अनुभव बनाने के लिए DynamoDB और Rockset का एक साथ उपयोग कैसे करें। ऐसा करते हुए, हमने अपने आवेदन को लागू करने के लिए वैचारिक नींव और व्यावहारिक कदम दोनों सीखे। सबसे पहले, हमने अपने एप्लिकेशन की मुख्य कार्यक्षमता को संभालने के लिए DynamoDB का उपयोग किया। इसमें किसी विशेष ग्राहक के लिए लेनदेन फ़ीड पुनर्प्राप्त करना या व्यक्तिगत लेनदेन देखना जैसे एक्सेस पैटर्न शामिल हैं। DynamoDB की प्राथमिक-कुंजी-आधारित विभाजन रणनीति के कारण, यह किसी भी पैमाने पर लगातार प्रदर्शन प्रदान करने में सक्षम है। लेकिन DynamoDB का डिज़ाइन इसके लचीलेपन को भी सीमित करता है। यह बड़ी संख्या में रिकॉर्ड में मनमाने फ़ील्ड या एकत्रीकरण पर चयनात्मक प्रश्नों को संभाल नहीं सकता है। इन पैटर्न को संभालने के लिए, हमने रॉकसेट का उपयोग किया। रॉकसेट डेटा-भारी अनुप्रयोगों को सशक्त बनाने के लिए पूरी तरह से प्रबंधित माध्यमिक सूचकांक प्रदान करता है। हमने देखा कि कैसे रॉकसेट आपके प्राथमिक डेटा स्टोर से एक निरंतर अंतर्ग्रहण पाइपलाइन बनाए रखता है जो आपके डेटा को एक परिवर्तित सूचकांक में अनुक्रमित करता है, जो उलटा, स्तंभ और पंक्ति अनुक्रमण को जोड़ता है। जैसे ही हम अपने पैटर्न से गुजरे, हमने देखा कि कैसे रॉकसेट की प्रत्येक अनुक्रमण तकनीक आनंददायक उपयोगकर्ता अनुभवों को संभालने के लिए एक साथ काम करती है। अंत में, हमने रॉकसेट को हमारी डायनेमोडीबी तालिका से जोड़ने और हमारे एप्लिकेशन में रॉकसेट के साथ इंटरैक्ट करने के लिए व्यावहारिक कदम उठाए। भी दिखाई देता है. यहाँ