Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

अपने रेल ऐप में डायनेमोडीबी का उपयोग करना

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

Amazon ने 2012 में सार्वजनिक उपयोग के लिए DynamoDB जारी करने की योजना की घोषणा की। Amazon ने मूल रूप से Dynamo को 2004 के छुट्टियों के मौसम के बाद आंतरिक रूप से विकसित किया था, जब उनके कई एप्लिकेशन ट्रैफ़िक की उच्च मात्रा के कारण विफल हो गए थे।

डायनेमोडीबी का उपयोग करने पर आपको कब विचार करना चाहिए?

डायनेमोडीबी उन अनुप्रयोगों के लिए एक ठोस विकल्प है, जिन्हें समवर्ती उपयोगकर्ताओं की एक बहुत बड़ी संख्या (हजारों+ में) का समर्थन करने की आवश्यकता होती है और इसलिए, प्रति सेकंड हजारों लोग पढ़ते/लिखते हैं। उदाहरण के लिए, सामाजिक नेटवर्क, गेम और IoT उपकरण DynamoDB के लिए अच्छे उम्मीदवार हो सकते हैं; उदाहरण के लिए, Lyft, Airbnb और Redfin डायनेमो का उपयोग करते हैं। यहां तक ​​​​कि अगर गोद लेना पहली बार में हल्का है, और प्रदर्शन की आवश्यकता तुरंत आवश्यक नहीं है, तो डायनेमोडीबी से शुरू करना फायदेमंद हो सकता है, जैसे कि पोस्टग्रेज जैसे पारंपरिक एसक्यूएल डेटाबेस, यदि आप अंततः पैमाने के लिए निर्माण करेंगे। हालाँकि, यदि आप एक डेटा वेयरहाउस या OLAP एप्लिकेशन बना रहे हैं, जिसे उपयोगकर्ता अक्सर क्वेरी करेंगे, तो एक स्कीमालेस डेटाबेस शायद सबसे अच्छा डिज़ाइन विकल्प नहीं है। इसके अलावा, जबकि RDMS को भंडारण के लिए अनुकूलित किया गया है, DynamoDB को गणना के लिए अनुकूलित किया गया है। अमेज़ॅन का कहना है कि डायनेमोडीबी किसी भी पैमाने पर एकल-अंक मिलीसेकंड प्रदर्शन प्रदान कर सकता है, साथ ही प्रति दिन 20 मिलियन+ अनुरोधों की चोटी के साथ प्रति दिन 10 ट्रिलियन+ अनुरोधों को संभाल सकता है। वाह!

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

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

  • ऑन-डिमांड बैकअप/पॉइंट-इन-टाइम रिकवरी:डायनेमोडीबी आपको पिछले ~ 30 दिनों के दौरान किसी भी समय तालिका को पुनर्स्थापित करने की अनुमति देता है। आकस्मिक लिखने या हटाने की चिंता करने के दिन इतने लंबे हैं!

डायनेमोडीबी की मूल बातें

DynamoDB के तीन मुख्य घटक हैं:टेबल, आइटम और विशेषताएँ। आइए इनमें से प्रत्येक को तोड़ दें।

  • तालिका:वस्तुओं का संग्रह
  • आइटम:विशेषताओं का एक संग्रह
  • विशेषता:एक मौलिक डेटा तत्व जिसे और अधिक तोड़ने की आवश्यकता नहीं है।

उदाहरण के लिए, यदि मैं किराये की संपत्तियों के प्रबंधन के लिए एक आवेदन कर रहा हूं, तो मेरे पास निम्नलिखित मदों के साथ "घर" नामक एक तालिका हो सकती है:

{
  "HouseID": 1,
  "AddressLine1": "123 Main St",
  "City": "Atlanta",
  "State": "GA",
  "Zip": 30322,
  "Rented": true,
  "Tenant": "John Smith"
}

{
  "HouseID": 2,
  "AddressLine1": "456 Square St",
  "City": "Nashville",
  "State": "TN",
  "Zip": 37211,
  "Rented": true,
  "Tenant": "Mary Jane"
}

HouseID, AddressLine1, शहर, राज्य, ज़िप, किराए और किरायेदार सभी वस्तुओं की विशेषताएँ हैं। आप किसी आइटम की तुलना row . से कर सकते हैं और column . के लिए एक विशेषता एक पारंपरिक SQL डेटाबेस में। हालांकि, मेरा सुझाव है कि एक पारंपरिक SQL डेटाबेस के साथ एक NoSQL डेटाबेस, जैसे DynamoDB, की तुलना करने से बचने की कोशिश करें, क्योंकि वे बहुत अलग जानवर हैं।

ध्यान दें कि प्रत्येक item एक अद्वितीय प्राथमिक कुंजी है (DynamoDB एकल विभाजन कुंजी और समग्र प्राथमिक कुंजी दोनों का समर्थन करता है)। हालांकि, HouseID . के अलावा अन्य , Houses तालिका स्कीमा रहित है। इस प्रकार, पारंपरिक SQL डेटाबेस के विपरीत, विशेषताओं और डेटा प्रकारों को समय से पहले परिभाषित करने की आवश्यकता नहीं है, जिसके लिए Zip की आवश्यकता होगी। integer . के साथ स्कीमा में परिभाषित किया जाना है निर्दिष्ट प्रकार।

आप सोच रहे होंगे कि डायनेमोडीबी के साथ इंडेक्स कैसे काम करते हैं। अगर ऐसा है तो यह एक बड़ा सवाल है! आइए मान लें कि मैं rented . पर एक अनुक्रमणिका बनाना चाहता हूं और zip मेरे Houses . के गुण तालिका (यानी, ज़िप कोड दिया गया है, उस ज़िप कोड में सभी किराए की संपत्तियां प्राप्त करें)। यदि मैं SQL डेटाबेस का उपयोग कर रहा होता, तो मैं एक ऐसा माइग्रेशन बना सकता हूँ जो इस तरह दिखता है:

CREATE INDEX RentedAndZipIndex
ON Houses (rented, zip);

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

रूबी और रूबी ऑन रेल्स के साथ DynamoDB का उपयोग करना

AWS, DynamoDB (यानी, Java, JavaScript, Node.js, .NET, PHP, Python, और Ruby, वर्तमान में) के लिए कई भाषाओं में SDK प्रदान करता है। रूबी के साथ DynamoDB का उपयोग करने के लिए, आपके पास दो विकल्प हैं:

1) स्थानीय रूप से डायनेमोडीबी डाउनलोड करें; यदि आप केवल अनुप्रयोगों का परीक्षण करना चाहते हैं, तो यह एक बढ़िया विकल्प है! जब आप उत्पादन पर आगे बढ़ने के लिए तैयार हों, तो आप स्थानीय समापन बिंदु को हटा सकते हैं और वेब सेवा को इंगित कर सकते हैं। 2) डायनेमोडीबी वेब सेवा का उपयोग करें, जिसके लिए एडब्ल्यूएस एक्सेस कुंजी और क्रेडिट की आवश्यकता होगी।

DynamoDB के साथ बातचीत करने के लिए, आप संभवतः CLI डाउनलोड करना चाहेंगे। अन्यथा, आप कंसोल या केवल एपीआई का उपयोग कर सकते हैं।

अंत में, इस श्रृंखला के प्रयोजन के लिए, आपको रूबी के साथ-साथ रूबी के लिए एडब्ल्यूएस एसडीके स्थापित करने की आवश्यकता होगी।

रेल के लिए, एक निफ्टी रत्न है जिसे आप अपनी परियोजना में जोड़ सकते हैं। इसे डायनामॉइड कहा जाता है। हालाँकि, आपको अभी भी AWS क्रेडेंशियल की आवश्यकता होगी।

रेल उदाहरण

चरण 1:सेटअप

आपके Gemfile . में , निम्नलिखित रत्न जोड़ें और bundle install run चलाएं :

gem 'dynamoid'
gem 'aws-sdk'

इसके बाद, एक नई फ़ाइल बनाएं aws.rb config/initializers . में निर्देशिका और निम्नलिखित जोड़ें:

अपने रेल ऐप में डायनेमोडीबी का उपयोग करना

नोट:क्रेडेंशियल रखने के लिए आपको पर्यावरण चर का उपयोग करना चाहिए। इन्हें कभी भी अपने प्रोजेक्ट में हार्ड-कोड न करें!

चरण 2:किसी दस्तावेज़ को परिभाषित करना

इस उदाहरण के लिए, मैंने एक house.rb बनाया है app/models में फ़ाइल करें निर्देशिका जो इस तरह दिखती है:

अपने रेल ऐप में डायनेमोडीबी का उपयोग करना

हमारे पास जो कुछ है, उस पर चलते हैं।

  • आपको चाहिए हमेशा शामिल करें include Dynamoid::Document अपनी तालिकाओं को परिभाषित करते समय।
  • पंक्ति 4 पर, मैं तालिका का नाम, कुंजी और क्षमता मोड परिभाषित कर रहा हूं। डायनामॉइड रत्न में समझदार चूक हैं, इसलिए तकनीकी रूप से, आपको उपरोक्त में से किसी को भी शामिल करने की आवश्यकता नहीं है। हालांकि, उन्हें परिभाषित करना डिफ़ॉल्ट को ओवरराइड कर देगा। आप read_capacity . को भी परिभाषित कर सकते हैं और write_capacity . हालांकि, चूंकि मैंने capacity_mode . को परिभाषित किया है on_demand . के रूप में , इन विकल्पों पर ध्यान नहीं दिया जाएगा क्योंकि on_demand क्षमता मोड एडब्ल्यूएस को स्वचालित रूप से ऊपर या नीचे स्केल करने के लिए कह रहा है।
  • अगला, मैं अपनी तालिका के लिए फ़ील्ड परिभाषित कर रहा हूं। आपको मॉडल के सभी क्षेत्रों के साथ-साथ डेटा प्रकार को भी परिभाषित करना होगा, हालांकि इसे string माना जाएगा। अगर छोड़ा गया है।)

dynamoid आपकी तालिका बनाने के लिए मणि एक निफ्टी रेक कार्य के साथ आता है।

rake dynamoid:create_tables

चरण 3:वस्तुओं के साथ सहभागिता

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

एसोसिएशन

उदाहरण के लिए, डायनामॉइड कई संघों का समर्थन करता है:has_many, has_one, has_and_belongs_to_many, and belongs_to सभी को वैसे ही परिभाषित किया जा सकता है जैसे आप सामान्य रूप से ActiveRecord के साथ करते हैं। आप कल्पना कर सकते हैं कि मेरे रेंटल प्रॉपर्टी ऐप में Lease . नामक एक और दस्तावेज़ तालिका है , इसलिए House . पर तालिका, मैं कुछ इस तरह परिभाषित कर सकता हूं:

has_one :lease

और Lease . पर तालिका:

belongs_to :house

सत्यापन

डायनामॉइड भी ActiveModel सत्यापन में बेक करता है, इसलिए आप पूरी तरह से तैयार हैं! दस्तावेज़ीकरण यहाँ उपलब्ध है।

कॉलबैक

before_ या after_ save, update, destroy . के लिए कॉलबैक उपलब्ध हैं क्रियाएँ, इसलिए मैं अपने lease.rb . में कुछ इस तरह परिभाषित कर सकता हूँ :

before_save :validate_signature

निर्माण

फिर से, ऑब्जेक्ट बनाने के लिए उपयोग किया जाने वाला सिंटैक्स मूल रूप से उसी के समान दिखाई देगा जिसका आप ActiveRecord के साथ उपयोग कर रहे हैं। मैं निम्नलिखित की तरह कुछ कर सकता था:

h = House.new(address_line_1: "123 Main St", city: "Cool City", state: "Iowa", zip: 52302)
h.rented = true
h.save

या मैं बस उपयोग कर सकता था .create विधि:

House.create(address_line_1: "123 Main St", city: "Cool City", state: "Iowa", zip: 52302)

क्वेरी करना

मुझे पता है कि मैं एक टूटे हुए रिकॉर्ड की तरह लग रहा हूं, लेकिन क्या आप अनुमान लगा सकते हैं कि पूछताछ कैसे काम करती है? आपको मिल गया, बिल्कुल ActiveRecord की तरह।

  • .find एक आईडी लेगा
  • .where कितने भी मेल खाने वाले मानदंड अपनाएंगे
  • .find_by_x जहां x एक विशेषता है।

और अधिक चाहते हैं?

एक बहुत कुछ है डायनामॉइड रत्न के बारे में जानने के लिए और अधिक, लेकिन उम्मीद है, यह आपको खेलना शुरू करने के लिए पर्याप्त है। आपके लिए उपलब्ध सुविधाओं के बारे में अधिक पढ़ने के लिए मैं आपको आधिकारिक GitHub पृष्ठ देखने के लिए प्रोत्साहित करता हूं!

अगला ऊपर

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

इस श्रृंखला के अगले लेख में, हम स्थानीय रूप से DynamoDB सेटअप प्राप्त करेंगे और Ruby SDK की कुछ विशेषताओं को आज़माएँगे।


  1. अपने रेल ऐप का परीक्षण करने के लिए एक डॉकर कंटेनर सेट करें

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

  1. रेल पर प्रतिक्रिया:एक साधारण ऐप बनाना

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

  1. रेल के साथ कोणीय का उपयोग करना 5

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