এর কোরে, DynamoDB হলো একটি NoSQL ডেটাবেস যা কী-ভ্যালু এবং ডকুমেন্ট ডেটা স্ট্রাকচার অফার করে। আসুন এটি আনপ্যাক করি। আমি কল্পনা করি এই আর্টিকেল পড়া অধিকাংশ ডেভেলপাররা ট্রেডিশনাল রিলেশনাল ডেটাবেস সিস্টেমের সাথে খুব পরিচিত, যেগুলো সু-সংজ্ঞায়িত স্কিমা এবং ডেটা টেবিল, সারি, এবং কলামে নর্মালাইজড থাকতে জৌড়ে। এই টেবিলগুলোর মধ্যে, "রিলেশনশিপ" থাকে ফরেন কী ব্যবহার করে। বিপরীতভাবে, DynamoDB হলো স্কিমা-লেস। যদিও প্রতিটি টেবিলে একটি প্রাইমারি কী থাকতে হবে, অন্য নন-কী অ্যাট্রিবিউটসের ওপর কোনো কনস্ট্রেইন্ট নেই। এটি কখন বেনেফিশিয়াল, আপনি জিজ্ঞাসা করলেন? 자, শিখি Amazon কেন DynamoDB তৈরি করেছিল।
Amazon ২০১২ সালে DynamoDB পাবলিক ইউজের জন্য রিলিজ করার পরিকল্পনা ঘোষণা করেছিল। Amazon মূলত Dynamo ইন্টারন্যালি ডেভেলপ করেছিল ২০০৪ সালের হোলিডে সিজনের পর, যখন তাদের বেশ কিছু অ্যাপ্লিকেশন হাই ট্রাফিকের কারণে ফেইল হয়েছিল।
আপনি কখন DynamoDB ব্যবহার করার কথা বিবেচনা করবেন?
DynamoDB এমন অ্যাপ্লিকেশনগুলোর জন্য একটি স olid অপশন যেগুলো খুব বড় সংখ্যক (হাজার হাজার+) কনকারেন্ট ইউজার সাপোর্ট করতে চায় এবং তাই দশ হাজার হাজার রিড/রাইট পার সেকেন্ড। উদাহরণস্বরূপ, সোশ্যাল নেটওয়ার্কস, গেমস, এবং IoT ডিভাইসগুলো DynamoDB-এর জন্য ভাল ক্যান্ডিডেট হতে পারে; উদাহরণস্বরূপ, Lyft, Airbnb, এবং Redfin Dynamo ব্যবহার করে। এমনকি যদি অডপশন শুরুতে হালকা থাকে, এবং পারফরমেন্সের প্রয়োজন তৎক্ষণাৎ নাও থাকে, DynamoDB-এ শুরু করা সুবিধাজনক হতে পারে একটি ট্রেডিশনাল SQL ডেটাবেসের তুলনায়, যেমন Postgres, যদি আপনি অবশেষে স্কেলের জন্য বিল্ড করতে চান। তবে, আপনি যদি একটি ডেটা ওয়েয়ারহাউস বা OLAP অ্যাপ্লিকেশন বিল্ড করেন যা ইউজাররা ঘন ঘন কোয়েরি করবে, একটি স্কিমা-লেস ডেটাবেস সম্ভবত সেরা ডিজাইন চয়েস নয়। மேலும், যেখানে RDMS স্টোরেজের জন্য অপ্টিমাইজড, DynamoDB কম্পিউটের জন্য অপ্টিমাইজড। Amazon দাবি করে যে DynamoDB যেকোনো স্কেলে সিঙ্গেল-ডিজিট মিলিসেকেন্ড পারফরমেন্স ডেলিভার করতে পারে, সেইসাথে ১০ ট্রিলিয়ন+ রিকোয়েস্ট পার ডে হ্যান্ডেল করতে পারে, পিকে ২০ মিলিয়ন+ রিকোয়েস্ট পার সেকেন্ড। ওয়াও!
অতিরিক্তভাবে, AWS অন্যান্য ফিচারসের একটি স্যুট অফার করে যা DynamoDB-কে ডেটা রিটেনশন এবং/অথবা সিকিউরিটি রিকোয়ার্ডিং অ্যাপ্লিকেশনগুলোর জন্য একটি চমৎকার ফিট করে তোলে।
Encryption at rest: DynamoDB আপনার সব ডেটা একটি এনক্রিপ্টেড টেবিলে সিকিউর করে, প্রাইমারি কী সহ। ইউজাররা তিনটি অপশন বেছে নিতে পারেন: একটি AWS-ওন্ড কাস্টমার মাস্টার কী (CMK), একটি AWS-ম্যানেজড CMK (অর্থাৎ, কী আপনার একাউন্টে স্টোর থাকে এবং AWS Key Management Service দ্বারা ম্যানেজড), বা একটি কাস্টমার-ম্যানেজড CMK (অর্থাৎ, কী আপনার একাউন্টে স্টোর থাকে এবং আপনার দ্বারা তৈরি/ওন্ড/ম্যানেজড)। কুল জিনিস হলো প্রতিটি টেবিল আলাদা অপশন ব্যবহার করতে পারে। এনক্রিপশন অ্যাট রেস্ট সম্পর্কে আরও জানতে, অফিশিয়াল AWS ডক্স এখানে।
On-demand backups/point-in-time recovery: DynamoDB আপনাকে একটি টেবিল রিস্টোর করতে দেয় গত ~৩০ দিনের যেকোনো পয়েন্টে। এক্সিডেন্টাল রাইট বা ডিলিট নিয়ে চিন্তা করার দিনগুলো শেষ!
DynamoDB-এর বেসিকস
DynamoDB-র তিনটি কোর কম্পোনেন্ট আছে: টেবিলস, আইটেমস, এবং অ্যাট্রিবিউটস। আসুন প্রতিটিকে ব্রেক ডাউন করি।
- টেবিল: আইটেমের একটি কালেকশন
- আইটেম: অ্যাট্রিবিউটের একটি কালেকশন
- অ্যাট্রিবিউট: একটি ফান্ডামেন্টাল ডেটা এলিমেন্ট যা আর ভাঙা দরকার নেই।
উদাহরণস্বরূপ, আমি যদি একটি অ্যাপ্লিকেশন বানাই ভাড়ার প্রোপার্টি ম্যানেজ করার জন্য, আমার একটি টেবিল থাকতে পারে "Houses" নামে নিচের আইটেমসহ:
{
"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, City, State, Zip, Rented এবং Tenant সবই আইটেমের অ্যাট্রিবিউট। আপনি একটি আইটেমকে একটি row এবং একটি অ্যাট্রিবিউটকে একটি column譬 করতে পারেন একটি ট্রেডিশনাল SQL ডেটাবেসে। যাইহোক, আমি পরামর্শ দিচ্ছি একটি NoSQL ডেটাবেস, যেমন DynamoDB, কে একটি ট্রেডিশনাল SQL ডেটাবেসের সাথে তুলনা করা থেকে পরিহার করতে, কারণ এগুলো খুব আলাদা বীষ্ট।
নোট করুন যে প্রতিটি item-এর একটি ইউনিক প্রাইমারি কী আছে (DynamoDB একক পার্টিশন কী এবং কম্পোজিট প্রাইমারি কী দুটোই সাপোর্ট করে)। তবে, HouseID-র বাদে, Houses টেবিলটি স্কিমা-লেস। তাই, অ্যাট্রিবিউটস এবং ডেটা টাইপস আগে থেকে ডিফাইন করতে হয় না, একটি ট্রেডিশনাল SQL ডেটাবেসের বিপরীতে, যেটি Zip-কে স্কিমা-এ ডিফাইন করতে বাধ্য করত integer টাইপ স্পেসিফাই করে।
আপনি চিন্তা করছেন होंगे ইনডেক্সগুলো DynamoDB-এ কীভাবে কাজ করে। যদি হয়, এটি একটি চমৎকার প্রশ্ন! আসুন অনুমান করি আমি rented এবং zip অ্যাট্রিবিউটের ওপর আমার Houses টেবিলে একটি ইনডেক্স তৈরি করতে চাই (অর্থাৎ, জিপ কোড দিয়ে, সেই জিপ কোডের সব রেন্টেড প্রোপার্টি পাওয়া)। আমি যদি একটি SQL ডেটাবেস ব্যবহার করতাম, আমি এমন একটি মাইগ্রেশন তৈরি করতাম:
CREATE INDEX RentedAndZipIndex ON Houses (rented, zip);
বিপরীতভাবে, যদি আমি DynamoDB ব্যবহার করতাম, আমি একটি সেকেন্ডারি ইনডেক্স সেট আপ করতে চাইতাম। এটি করতে, আমাকে একটি পার্টিশন কী এবং একটি সোর্ট কী স্পেসিফাই করতে হত। এই উদাহরণে, zip হলো পার্টিশন কী এবং rented হলো সোর্ট কী। DynamoDB-এ ইনডেক্স সম্পর্কে আরও অনেক কিছু শিখতে আছে, কিন্তু এই আর্টিকেলের জন্য, আমরা এখানেই ছেড়ে দিচ্ছি। আপনি আগ্রহী হলে, আরও জানতে পারেন এখানে।
Ruby এবং Ruby on Rails-এ DynamoDB ব্যবহার করা
AWS DynamoDB-র জন্য বেশ কিছু ল্যাঙ্গুয়েজে SDK অফার করে (অর্থাৎ, Java, JavaScript, Node.js, .NET, PHP, Python, এবং Ruby, বর্তমানে)। Ruby-তে DynamoDB ব্যবহার করতে, আপনার দুটি অপশন আছে:
1) DynamoDB লোকালি ডাউনলোড করুন; আপনি যদি শুধু অ্যাপ্লিকেশন টেস্ট করতে চান, এটি একটি চমৎকার অপশন! আপনি যখন প্রোডাকশনে যেতে প্রস্তুত, লোকাল এন্ডপয়েন্ট রিমুভ করে ওয়েব সার্ভিসে পয়েন্ট করতে পারেন। 2) DynamoDB ওয়েব সার্ভিস ব্যবহার করুন, যেটি একটি AWS অ্যাক্সেস কী এবং ক্রেডেনশিয়ালস দরকার।
DynamoDB-র সাথে ইন্টারঅ্যাক্ট করতে, আপনি সম্ভবত CLI ডাউনলোড করতে চাবেন। অন্যথায়, আপনি কনসোল বা শুধু API ব্যবহার করতে পারেন।
অবশেষে, এই সিরিজের উদ্দেশ্যে, আপনার Ruby ইনস্টলড থাকতে হবে, সেইসাথে AWS SDK for Ruby।
Rails-এ, একটি চমৎকার জেম আছে যা আপনি আপনার প্রজেক্টে যোগ করতে পারেন। এর নাম Dynamoid। যাইহোক, আপনাকে AWS ক্রেডেনশিয়ালস দরকার থাকবে।
Rails উদাহরণ
Step 1: সেটআপ
আপনার Gemfile-এ নিচের জেমগুলো যোগ করুন এবং bundle install রান করুন:
gem 'dynamoid'
gem 'aws-sdk'
এরপর, aws.rb নামে একটি নতুন ফাইল তৈরি করুন config/initializers ডিরেক্টরিতে এবং নিচের কন্টেন্ট যোগ করুন:

নোট: আপনার ক্রেডেনশিয়ালস রাখতে এনভায়রনমেন্ট ভেরিয়েবলস ব্যবহার করুন। কখনোই আপনার প্রজেক্টে হার্ড-কোড করবেন না!
Step 2: একটি ডকুমেন্ট ডিফাইন করা
এই উদাহরণের জন্য, আমি house.rb নামে একটি ফাইল তৈরি করলাম app/models ডিরেক্টরিতে যা এরকম দেখে:

আসুন দেখি এখানে কী আছে।
- আপনি অবশ্যই সবসময়
include Dynamoid::Documentইনক্লুড করতে হবে আপনার টেবিল ডিফাইন করার সময়। - লাইন ৪-এ, আমি টেবিল নাম, কী, এবং ক্যাপাসিটি মোড ডিফাইন করছি। Dynamoid জেমের সেন্সিবল ডিফল্টস আছে, তাই টেকনিক্যালি, আপনাকে উপরের যেকোনো একটাও ইনক্লুড করতে হবে না। যাইহোক, সেগুলো ডিফাইন করলে ডিফল্টস ওভাররাইড হবে। আপনি
read_capacityএবংwrite_capacityও ডিফাইন করতে পারেন। যাইহোক, যেহেতু আমিcapacity_modeকেon_demandডিফাইন করেছি, এই অপশনগুলো ইগনোর হবে যেহেতুon_demandক্যাপাসিটি মোড AWS-কে বলছে অটোমেটিক্যালি স্কেল আপ বা ডাউন করতে। - এরপর, আমি আমার টেবিলের ফিল্ডগুলো ডিফাইন করছি। আপনাকে আপনার মডেলের সব ফিল্ড ডিফাইন করতে হবে, সেইসাথে ডেটা টাইপও, যদিও এটি অমিট করা থাকলে
stringধরা হবে।)
dynamoid জেম একটি চমৎকার রেক টাস্ক দিয়ে আসে আপনার টেবিল তৈরি করতে।
rake dynamoid:create_tables
Step 3: অবজেক্টসের সাথে ইন্টারঅ্যাক্ট করা
এই কিছু আপনার কাছে অনভিজ্ঞ লাগতে পারে, কিন্তু আমার ভাল খবর আছে! dynamoid জেমের চমৎকার অংশ হলো অন্য অনেক ফিচার जिनি আপনি Active Record-এ অভ্যাসে আছেন, সেগুলো খুব সিমিলারলি কাজ করে।
অ্যাসোসিয়েশন
উদাহরণস্বরূপ, Dynamoid বেশ কিছু অ্যাসোসিয়েশন সাপোর্ট করে: has_many, has_one, has_and_belongs_to_many, and belongs_to সবই ডিফাইন করা যায় ঠিক वैसे ही যেভাবে আপনি ActiveRecord-এ নরমালি করতেন। আপনি কল্পনা করতে পারেন আমার রেন্টাল প্রোপার্টি অ্যাপে অন্য একটি ডকুমেন্ট টেবিল আছে Lease নামে, তাই House টেবিলে, আমি এমন কিছু ডিফাইন করতে পারতাম:
has_one :lease
এবং Lease টেবিলে:
belongs_to :house
ভ্যালিডেশন
Dynamoid 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একটি ID নেয়.whereযেকোনো সংখ্যক ম্যাচিং ক্রাইটেরিয়া নেয়.find_by_xযেখানেxহলো একটি অ্যাট্রিবিউট।
আরও চান?
Dynamoid জেম সম্পর্কে অনেক বেশি শিখতে আছে, কিন্তু আশা করি এটি আপনাকে শুরু করে spelen দেওয়ার জন্য যথেষ্ট। আমি আপনাকে অফিশিয়াল GitHub পেজ এখানে চেক আউট করতে প্রोतসাহিত করি যাতে আপনার জন্য উপলব্ধ ফিচারগুলো সম্পর্কে আরও জানতে পারেন!
পরবর্তীটি
খুব কিছু হজম করতে আছে এখানে! আশা করি আপনি কিছুটা আরও নলেজেবল ফিল করছেন কী মানে যখন কেউ বলে 'NoSQL' এবং কেন DynamoDB স্কিমা-লেস ডেটাবেস দরকার প্রজেক্টগুলোর জন্য একটি ভাল চয়েস হতে পারে। অতিরিক্তভাবে, আমরা dynamoid জেম আপনার Rails প্রজেক্টের সাথে ব্যবহার করার বেসিক সেটআপের মাধ্যমে হয়ে গেলাম।
এই সিরিজের পরবর্তী আর্টিকেলে, আমরা DynamoDB লোকালি সেট আপ করব এবং Ruby SDK-এর কিছু ফিচার ট্রাই করব।