अमेज़ॅन डायनेमोडीबी

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

इसके पश्चात् भी तीसरे पक्ष के संबंधित डेटाबेस   प्रबंधन सिस्टम को अमेज़ॅन के ग्राहक मूल को नियंत्रण के लिए संघर्ष करना पड़ा है।

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

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

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

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

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

किसी आइटम को उसकी विशेषताओं के सबसेट जिसे कुंजी कहा जाता है, का उपयोग करके तालिका में विशिष्ट रूप से पहचाना जाता है।

डाइनेमोडी बी में कुंजियाँ
प्राथमिक कुंजी विशेषताओं का एक सेट है जो डायनेमोडीबी तालिका में विशिष्ट रूप से आइटम की पहचान करती है। डाइनेमोडी बी तालिका के निर्माण के लिए प्राथमिक कुंजी की परिभाषा की आवश्यकता थी। डायनेमोडीबी तालिका में प्रत्येक आइटम में प्राथमिक कुंजी बनाने वाली सभी विशेषताओं का होना आवश्यक है, और तालिका में किसी भी दो आइटम में एक ही कुंजी नहीं हो सकती है। डायनमो डीबी में प्राथमिक कुंजी में एक या दो विशेषताएँ सम्मिलित  हो सकती हैं।

जब प्राथमिक कुंजी केवल एक विशेषता से बनी होती है, तब इसे विभाजन कुंजी कहा जाता है। विभाजन कुंजी डेटा आइटम का भौतिक स्थान तय करती है। इस स्थिति में, तालिका में किसी भी दो आइटम में समान विभाजन कुंजियाँ नहीं हो सकती हैं।

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

डायनेमोडीबी डेटा प्रकार
डाइनेमोडी बी संख्यात्मक, स्ट्रिंग, बूलियन, दस्तावेज़ और सेट डेटा प्रकारों का समर्थन करता है।

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

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

जब एक द्वितीयक सूचकांक में प्राथमिक सूचकांक के समान विभाजन कुंजी होती है किन्तु एक अलग सॉर्ट कुंजी होती है, तब इसे स्थानीय माध्यमिक सूचकांक कहा जाता है।

जब प्राथमिक सूचकांक और माध्यमिक सूचकांक में अलग-अलग विभाजन कुंजी होती है, तब माध्यमिक सूचकांक को वैश्विक माध्यमिक सूचकांक के रूप में जाना जाता है।

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

डेटा संरचनाएं
डेटा प्रबंधित करने के लिए डाइनेमोडी बी हैश फंकशन और बी-वृक्ष का उपयोग करता है। प्रवेश पर, डेटा को पहले विभाजन कुंजी पर हैशिंग के माध्यम के विभिन्न विभाजनों में वितरित किया जाता है। प्रत्येक विभाजन 10 जीबी तक डेटा संग्रहीत कर सकता है और डिफ़ॉल्ट रूप से 1,000 लेखन क्षमता इकाइयों (डब्ल्यूसीयू) और 3,000 पढ़ने की क्षमता इकाइयों (आरसीयू) को संभाल सकता है। एक आरसीयू आकार में 4KB तक की वस्तुओं के लिए प्रति सेकंड पढ़ने वाली एक शक्तिशाली  स्थिरता या प्रति सेकंड दो अंतिम स्थिरता पढ़ने का प्रतिनिधित्व करता है। एक WCU 1KB आकार तक के आइटम के लिए प्रति सेकंड एक राइट का प्रतिनिधित्व करता है।

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

प्रत्येक विभाजन के अंदर, तीन नोड्स में से एक को लीडर नोड नामित किया गया है। सभी लेखन कार्य प्रचार से पहले लीडर नोड के माध्यम से यात्रा करते हैं, जो डाइनेमोडी बी में लेखन को सुसंगत बनाता है। अपनी स्थिति बनाए रखने के लिए, लीडर हर 1.5 सेकंड में एक दूसरे नोड को दिल की धड़कन भेजता है। यदि किसी अन्य नोड को दिल की धड़कन मिलना बंद हो जाए, तब यह एक नए नेता के चुनाव की प्रारंभिक कर सकता है। डाइनेमोडी बी  नेताओं का चुनाव करने के लिए Paxos (कंप्यूटर विज्ञान) का उपयोग करता है।

विभाजन और नोड्स के प्रावधान और प्रबंधन जैसे इंजीनियरिंग ओवरहेड्स के कारण अमेज़ॅन इंजीनियरों ने मूल रूप से डायनमो से परहेज किया। उत्तर में, डाइनेमोडी बी टीम ने डेटाबेस को प्रबंधित करने के लिए एक सेवा बनाई जिसे वह AutoAdmin कहती है। जब कोई नोड प्रतिक्रिया देना बंद कर देता है तब ऑटोएडमिन उसे दूसरे नोड से डेटा कॉपी करके बदल देता है। जब कोई विभाजन अपनी तीन सीमाओं (RCU, WCU, या 10GB) में से किसी एक से अधिक हो जाता है, तब AutoAdmin डेटा को और अधिक खंडित करने के लिए स्वचालित रूप से अतिरिक्त विभाजन जोड़ देगा।

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

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

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

अब मान लीजिए कि एक डाइनेमोडी बी उपयोगकर्ता एक गेट ऑपरेशन जारी करता है। अनुरोध राउटर प्रमाणीकरण और प्राधिकरण के साथ पहले की तरह आगे बढ़ता है। इसके पश्चात्, जैसा कि ऊपर बताया गया है, उचित हैश में निकटताने के लिए हमारे पास अपनी विभाजन कुंजी हैश है। अब, हमें एक समस्या का प्रतिक्रिया करना पड़ता है: तीन नोड्स अंततः एक-दूसरे के साथ संगति में हैं, हम कैसे तय कर सकते हैं कि किसकी जांच करनी है? रीड जारी करते समय डाइनेमोडी बी उपयोगकर्ता को दो विकल्प प्रदान करता है: सुसंगत और अंततः सुसंगत। लगातार पढ़ा गया लीडर नोड पर जाता है। किन्तु स्थिरता-उपलब्धता व्यापार-बंद यहां फिर से अपना सिर उठाता है: रीड-हेवी सिस्टम में, सदैव लीडर से पढ़ने से एकल नोड प्रभावित हो सकता है और उपलब्धता कम हो सकती है।

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

प्रदर्शन
डाइनेमोडी बी प्रदर्शन मेट्रिक्स को उजागर करता है जो उपयोगकर्ताओं को इसे सही ढंग से व्यवस्थित करने में सहायता करता है और डाइनेमोडी बी  का उपयोग करने वाले अनुप्रयोगों को सुचारू रूप से चालू रखता है: इन मेट्रिक्स को अमेज़ॅन वेब सेवाएं मैनेजमेंट कंसोल का उपयोग करके, एडब्ल्यूएस कमांड लाइन इंटरफेस का उपयोग करके, या अमेज़ॅन क्लाउडवॉच के साथ एकीकृत एक निगरानी उपकरण का उपयोग करके ट्रैक किया जा सकता है।
 * अनुरोध और गला घोंटना
 * त्रुटियां: ProvisionedThoughtputExceededException, सशर्त जांच विफल अपवाद, आंतरिक सर्वर त्रुटि (HTTP 500)
 * ग्लोबल सेकेंडरी इंडेक्स निर्माण से संबंधित मेट्रिक्स

भाषा बाइंडिंग
डायनेमोडीबी भाषा बाइंडिंग वाली भाषाओं और फ्रेमवर्क में जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, नोड.जेएस, गो (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग भाषा)|सी# .NET फ्रेमवर्क|.नेट, पर्ल, पीएचपी, पायथन (प्रोग्रामिंग भाषा) सम्मिलित हैं। ), रूबी (प्रोग्रामिंग भाषा), रस्ट (प्रोग्रामिंग भाषा), हास्केल (प्रोग्रामिंग भाषा), एरलांग (प्रोग्रामिंग भाषा), डीजेंगो (वेब ​​फ्रेमवर्क), और  ग्रेल्स (ढांचा) ।

HTTP एपीआई
HTTP API के विरुद्ध, क्वेरी आइटम: नमूना प्रतिक्रिया:

जाओ
गो में आइटम प्राप्त करें (प्रोग्रामिंग भाषा): Go में DeleteItem (प्रोग्रामिंग भाषा): UpdateItem का उपयोग करके गो में -amazon-dynamodb-expression-builder-in-the-aws-sdk-for-go/ एक्सप्रेशन बिल्डर:

यह भी देखें

 * अमेज़न अरोरा
 * अमेज़ॅन दस्तावेज़डीबी
 * अमेज़ॅन रेडशिफ्ट
 * अमेज़ॅन रिलेशनल डेटाबेस सेवा
 * संबंधपरक डेटाबेस प्रबंधन प्रणालियों की तुलना

बाहरी संबंध

 * Video: AWS re:Invent 2019: [REPEAT 1 अमेज़न डाइनेमोडी बी deep dive: Advanced design patterns (DAT403-R1) ]
 * Video: AWS re:Invent 2019: [REPEAT 1 अमेज़न डाइनेमोडी बी deep dive: Advanced design patterns (DAT403-R1) ]