এর মূলে, DynamoDB হল একটি NoSQL ডাটাবেস যা কী-মান এবং ডকুমেন্ট ডেটা স্ট্রাকচার অফার করে। এর এই আনপ্যাক করা যাক. আমি কল্পনা করি যে বেশিরভাগ বিকাশকারীরা এটি পড়ছেন তারা ঐতিহ্যগত রিলেশনাল ডাটাবেস সিস্টেমগুলির সাথে বেশ পরিচিত, যার মধ্যে সু-সংজ্ঞায়িত স্কিমা এবং ডেটা সারণি, সারি এবং কলামে স্বাভাবিক করা হয়। এই টেবিলগুলির মধ্যে, বিদেশী কীগুলি ব্যবহার করে "সম্পর্ক" রয়েছে। বিপরীতে, DynamoDB পরিকল্পনাহীন। যদিও প্রতিটি টেবিলে একটি প্রাথমিক কী থাকতে হবে, অন্যান্য নন-কী বৈশিষ্ট্যগুলিতে অন্য কোনও সীমাবদ্ধতা নেই। কখন এই উপকারী হবে, আপনি জিজ্ঞাসা? আচ্ছা, আসুন জেনে নিই কেন অ্যামাজন DynamoDB তৈরি করেছে।
অ্যামাজন 2012 সালে জনসাধারণের ব্যবহারের জন্য DynamoDB প্রকাশ করার পরিকল্পনা ঘোষণা করেছিল৷ অ্যামাজন মূলত 2004 সালের ছুটির মরসুমের পরে অভ্যন্তরীণভাবে ডায়নামো তৈরি করেছিল, যখন তাদের বেশ কয়েকটি অ্যাপ্লিকেশন বেশি ট্রাফিকের কারণে ব্যর্থ হয়েছিল৷
আপনি কখন DynamoDB ব্যবহার করার কথা বিবেচনা করবেন?
DynamoDB হল এমন অ্যাপ্লিকেশনগুলির জন্য একটি কঠিন বিকল্প যেগুলিকে সমসাময়িক ব্যবহারকারীদের একটি খুব বড় সংখ্যক (হাজার+ মধ্যে) সমর্থন করতে হবে এবং তাই, প্রতি সেকেন্ডে হাজার হাজার পঠন/লেখা হয়। উদাহরণস্বরূপ, সামাজিক নেটওয়ার্ক, গেমস এবং আইওটি ডিভাইসগুলি ডায়নামোডিবি-র জন্য ভাল প্রার্থী হতে পারে; উদাহরণস্বরূপ, Lyft, Airbnb এবং Redfin Dynamo ব্যবহার করে। এমনকি যদি দত্তক নেওয়া প্রথমে হালকা হয়, এবং কর্মক্ষমতার প্রয়োজন অবিলম্বে প্রয়োজনীয় না হয়, DynamoDB দিয়ে শুরু করা সুবিধাজনক হতে পারে বনাম একটি ঐতিহ্যবাহী SQL ডাটাবেস, যেমন Postgres, যদি আপনি শেষ পর্যন্ত স্কেলের জন্য তৈরি করেন। যাইহোক, আপনি যদি একটি ডেটা গুদাম বা OLAP অ্যাপ্লিকেশন তৈরি করছেন যা ব্যবহারকারীরা প্রায়শই জিজ্ঞাসা করবে, একটি স্কিমলেস ডাটাবেস সম্ভবত সেরা ডিজাইন পছন্দ নয়। অধিকন্তু, যেখানে RDMS স্টোরেজের জন্য অপ্টিমাইজ করা হয়েছে, সেখানে DynamoDB কম্পিউটের জন্য অপ্টিমাইজ করা হয়েছে। Amazon দাবি করে যে DynamoDB যেকোনো স্কেলে একক-অঙ্কের মিলিসেকেন্ড পারফরম্যান্স সরবরাহ করতে পারে, সেইসাথে প্রতি সেকেন্ডে 20 মিলিয়ন+ অনুরোধের সর্বোচ্চ সহ প্রতিদিন 10 ট্রিলিয়ন+ অনুরোধগুলি পরিচালনা করতে পারে। বাহ!
অতিরিক্তভাবে, AWS অন্যান্য বৈশিষ্ট্যের একটি স্যুট অফার করে যা ডাইনামোডিবিকে ডেটা ধারণ এবং/অথবা নিরাপত্তার প্রয়োজন এমন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত করে তুলতে পারে৷
-
বিশ্রামে এনক্রিপশন:DynamoDB প্রাথমিক কী সহ একটি এনক্রিপ্ট করা টেবিলে আপনার সমস্ত ডেটা সুরক্ষিত করে। ব্যবহারকারীরা তিনটি বিকল্প বেছে নিতে পারেন:একটি AWS-মালিকানাধীন গ্রাহক মাস্টার কী (CMK), একটি AWS-পরিচালিত CMK (যেমন, কীটি আপনার অ্যাকাউন্টে সংরক্ষিত এবং AWS কী ম্যানেজমেন্ট সার্ভিস দ্বারা পরিচালিত), অথবা একটি গ্রাহক-পরিচালিত CMK (যেমন। , কীটি আপনার অ্যাকাউন্টে সংরক্ষিত এবং আপনার দ্বারা তৈরি/মালিকানাধীন/পরিচালিত।) চমৎকার জিনিস হল যে প্রতিটি টেবিল একটি ভিন্ন বিকল্প ব্যবহার করতে পারে। বিশ্রামে এনক্রিপশন সম্পর্কে আরও পড়তে, এখানে অফিসিয়াল AWS ডক্স রয়েছে৷
৷ -
অন-ডিমান্ড ব্যাকআপ/পয়েন্ট-ইন-টাইম রিকভারি:DynamoDB আপনাকে গত ~30 দিনের মধ্যে যেকোনো সময়ে একটি টেবিল পুনরুদ্ধার করতে দেয়। দুর্ঘটনাজনিত লেখা বা মুছে ফেলার বিষয়ে উদ্বিগ্ন হওয়ার দিন এত দীর্ঘ!
DynamoDB এর মূল বিষয়গুলি
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, City, State, Zip, Rented এবং Tenant হল আইটেমের সমস্ত বৈশিষ্ট্য। আপনি একটি আইটেমকে একটি row
সাথে তুলনা করতে পারেন এবং একটি column
এর একটি বৈশিষ্ট্য একটি ঐতিহ্যগত SQL ডাটাবেসে। যাইহোক, আমি একটি NoSQL ডাটাবেস, যেমন DynamoDB, একটি ঐতিহ্যবাহী SQL ডাটাবেসের সাথে তুলনা না করার চেষ্টা করার পরামর্শ দিচ্ছি, কারণ তারা খুবই ভিন্ন প্রাণী।
লক্ষ্য করুন যে প্রতিটি item
একটি অনন্য প্রাথমিক কী রয়েছে (DynamoDB একক পার্টিশন কী এবং যৌগিক প্রাথমিক কী উভয়ই সমর্থন করে)। যাইহোক, HouseID
ছাড়া , Houses
টেবিল পরিকল্পনাহীন। সুতরাং, প্রথাগত SQL ডাটাবেসের বিপরীতে, গুণাবলী এবং ডেটা প্রকারগুলিকে সময়ের আগে সংজ্ঞায়িত করার প্রয়োজন নেই, যার জন্য Zip
প্রয়োজন হবে। integer
দিয়ে স্কিমাতে সংজ্ঞায়িত করা টাইপ নির্দিষ্ট করা হয়েছে।
আপনি হয়তো ভাবছেন কিভাবে সূচীগুলি DynamoDB এর সাথে কাজ করে। যদি তাই হয়, এটি একটি মহান প্রশ্ন! আসুন ভান করি আমি rented
-এ একটি সূচক তৈরি করতে চাই এবং zip
আমার Houses
এর বৈশিষ্ট্য টেবিল (অর্থাৎ, জিপ কোড দেওয়া হলে, সেই জিপ কোডে সমস্ত ভাড়া দেওয়া সম্পত্তি পান)। যদি আমি একটি এসকিউএল ডাটাবেস ব্যবহার করতাম, তাহলে আমি একটি মাইগ্রেশন তৈরি করতে পারি যা এইরকম দেখায়:
CREATE INDEX RentedAndZipIndex
ON Houses (rented, zip);
বিপরীতে, আমি যদি DynamoDB ব্যবহার করতাম, আমি একটি সেকেন্ডারি সূচক সেট আপ করতে চাই। এটি করার জন্য, আমাকে একটি পার্টিশন কী এবং একটি সাজানোর কী উল্লেখ করতে হবে। এই উদাহরণে, জিপ হল পার্টিশন কী এবং ভাড়া করা হল সাজানোর কী। DynamoDB এর সাথে সূচী সম্পর্কে আরও অনেক কিছু জানার আছে, কিন্তু এই নিবন্ধের জন্য, আমরা এটি এখানে ছেড়ে দেব। আপনি যদি আরও শিখতে আগ্রহী হন, আপনি এখানে আরও পড়তে পারেন।
রুবি এবং রুবি অন রেলের সাথে DynamoDB ব্যবহার করা
AWS DynamoDB এর জন্য বেশ কয়েকটি ভাষায় SDK অফার করে (যেমন, Java, JavaScript, Node.js, .NET, PHP, Python, এবং Ruby, বর্তমানে।) রুবির সাথে DynamoDB ব্যবহার করার জন্য, আপনার কাছে দুটি বিকল্প রয়েছে:
1) স্থানীয়ভাবে DynamoDB ডাউনলোড করুন; আপনি যদি শুধুমাত্র অ্যাপ্লিকেশন পরীক্ষা করতে চান, এটি একটি দুর্দান্ত বিকল্প! আপনি যখন উৎপাদনে যাওয়ার জন্য প্রস্তুত হন, তখন আপনি স্থানীয় এন্ডপয়েন্টটি সরিয়ে ওয়েব পরিষেবার দিকে নির্দেশ করতে পারেন৷ 2) DynamoDB ওয়েব পরিষেবা ব্যবহার করুন, যার জন্য একটি AWS অ্যাক্সেস কী এবং ক্রেডসের প্রয়োজন হবে৷
DynamoDB এর সাথে ইন্টারঅ্যাক্ট করতে, আপনি সম্ভবত CLI ডাউনলোড করতে চাইবেন। অন্যথায়, আপনি কনসোল বা শুধুমাত্র API ব্যবহার করতে পারেন।
অবশেষে, এই সিরিজের উদ্দেশ্যে, আপনাকে রুবি ইনস্টল করতে হবে, সেইসাথে রুবির জন্য AWS SDK।
রেলের জন্য, একটি নিফটি রত্ন রয়েছে যা আপনি আপনার প্রকল্পে যোগ করতে পারেন। একে ডাইনাময়েড বলা হয়। যাইহোক, আপনার এখনও AWS শংসাপত্রের প্রয়োজন হবে৷
৷রেলের উদাহরণ
ধাপ 1:সেটআপ
আপনার Gemfile
-এ , নিম্নলিখিত রত্ন যোগ করুন এবং bundle install
চালান :
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
থেকে এই বিকল্পগুলি উপেক্ষা করা হবে ক্যাপাসিটি মোড AWS কে স্বয়ংক্রিয়ভাবে স্কেল আপ বা ডাউন করতে বলছে। - এরপর, আমি আমার টেবিলের জন্য ক্ষেত্র সংজ্ঞায়িত করছি। আপনাকে অবশ্যই মডেলের সমস্ত ক্ষেত্র সংজ্ঞায়িত করতে হবে, সেইসাথে ডেটা টাইপ, যদিও এটি
string
বলে ধরে নেওয়া হবে যদি বাদ দেওয়া হয়।)
dynamoid
আপনার টেবিল তৈরি করতে রত্ন একটি নিফটি রেক টাস্ক নিয়ে আসে।
rake dynamoid:create_tables
ধাপ 3:বস্তুর সাথে ইন্টারঅ্যাক্ট করা
যদিও এর কিছু আপনার কাছে বিদেশী মনে হতে পারে, আমার কাছে সুসংবাদ আছে! dynamoid
সম্পর্কে দুর্দান্ত অংশ রত্ন হল যে অন্যান্য অনেক বৈশিষ্ট্য যা আপনি অ্যাক্টিভ রেকর্ডের সাথে একইভাবে কাজ করেন।
অ্যাসোসিয়েশনগুলি
৷
উদাহরণস্বরূপ, ডাইনাময়েড বেশ কয়েকটি অ্যাসোসিয়েশন সমর্থন করে:has_many, has_one, has_and_belongs_to_many, and belongs_to
আপনি সাধারণত ActiveRecord এর সাথে ঠিক যেমনটি সংজ্ঞায়িত করতে পারেন। আপনি কল্পনা করতে পারেন যে আমার ভাড়ার বৈশিষ্ট্য অ্যাপটিতে Lease
নামে আরেকটি নথি টেবিল রয়েছে , তাই Houses
-এ টেবিল, আমি এইরকম কিছু সংজ্ঞায়িত করতে পারি:
has_one :lease
এবং Lease
-এ টেবিল:
belongs_to :house
বৈধকরণ
ডায়নাময়েড অ্যাক্টিভমডেল যাচাইকরণেও বেক করে, তাই আপনি সেখানে প্রস্তুত! ডকুমেন্টেশন এখানে পাওয়া যায়।
কলব্যাক
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 পৃষ্ঠাটি দেখতে উৎসাহিত করি!
পরবর্তীতে
ওয়েল, এখানে হজম করার জন্য অনেক আছে! আশা করি, কেউ 'NoSQL' বললে এর অর্থ কী এবং কেন DynamoDB একটি স্কিমলেস ডাটাবেস প্রয়োজন এমন প্রকল্পগুলির জন্য একটি ভাল পছন্দ হতে পারে সে সম্পর্কে আপনি কিছুটা বেশি জ্ঞানী বোধ করেন। উপরন্তু, আমরা dynamoid
ব্যবহার করার প্রাথমিক সেটআপের মধ্য দিয়ে চলেছি আপনার রেল প্রকল্পের সাথে রত্ন৷
এই সিরিজের পরবর্তী নিবন্ধে, আমরা স্থানীয়ভাবে DynamoDB সেটআপ পাব এবং রুবি SDK-এর কিছু বৈশিষ্ট্য ব্যবহার করে দেখব।