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

Amazon DynamoDB एक पूरी तरह से प्रबंधित स्वामित्व वाला NoSQL डेटाबेस है जो Amazon.com द्वारा Amazon वेब सर्विसेज पोर्टफोलियो के हिस्से के रूप में पेश किया गया है। DynamoDB प्रतिकृति (कंप्यूटिंग), ऑटोस्केलिंग, आराम पर एन्क्रिप्शन और अन्य सुविधाओं के बीच ऑन-डिमांड बैकअप के लिए अंतर्निहित समर्थन के साथ एक तेज़ सतत डेटा संरचना कुंजी-मूल्य डेटा संग्रह | की-वैल्यू डेटास्टोर प्रदान करता है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

प्रदर्शन
DynamoDB प्रदर्शन मेट्रिक्स को उजागर करता है जो उपयोगकर्ताओं को इसे सही ढंग से व्यवस्थित करने में मदद करता है और DynamoDB का उपयोग करने वाले अनुप्रयोगों को सुचारू रूप से चालू रखता है: इन मेट्रिक्स को अमेज़ॅन वेब सर्विसेज मैनेजमेंट कंसोल का उपयोग करके, एडब्ल्यूएस कमांड लाइन इंटरफेस का उपयोग करके, या अमेज़ॅन क्लाउडवॉच के साथ एकीकृत एक निगरानी उपकरण का उपयोग करके ट्रैक किया जा सकता है।
 * अनुरोध और गला घोंटना
 * त्रुटियां: 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 Amazon DynamoDB deep dive: Advanced design patterns (DAT403-R1) ]
 * Video: AWS re:Invent 2019: [REPEAT 1 Amazon DynamoDB deep dive: Advanced design patterns (DAT403-R1) ]