অনেক ডেভেলপমেন্ট টিম ইভেন্ট-চালিত আর্কিটেকচার এবং ব্যবহারকারী-বান্ধব, স্কেলে পারফরম্যান্ট অ্যাপ্লিকেশন তৈরির জন্য DynamoDB-তে ফিরে আসে। একটি অপারেশনাল ডাটাবেস হিসাবে, DynamoDB একাধিক ভৌগলিক অবস্থান জুড়ে মোতায়েন থাকা সত্ত্বেও রিয়েল-টাইম লেনদেনের জন্য অপ্টিমাইজ করা হয়। যাইহোক, এটি অনুসন্ধান এবং বিশ্লেষণ অ্যাক্সেস নিদর্শনগুলির জন্য শক্তিশালী কর্মক্ষমতা প্রদান করে না।
যদিও DynamoDB-এর মতো NoSQL ডেটাবেসগুলিতে সাধারণত চমৎকার স্কেলিং বৈশিষ্ট্য থাকে, তারা শুধুমাত্র সীমিত ক্রিয়াকলাপগুলিকে সমর্থন করে যা অনলাইন লেনদেন প্রক্রিয়াকরণের উপর দৃষ্টি নিবদ্ধ করে। এটি দক্ষ ইন্ডেক্সিং কৌশলগুলির উপর খুব বেশি ঝোঁক ছাড়া ডেটা অনুসন্ধান করা, ফিল্টার করা, একত্রিত করা এবং যোগদান করা কঠিন করে তোলে।
DynamoDB প্রতিটি আইটেমে উপস্থিত ব্যবহারকারী-নির্দিষ্ট পার্টিশন কী ক্ষেত্রের উপর ভিত্তি করে প্রচুর সংখ্যক নোডের উপর বিভাজন করে তথ্য সংরক্ষণ করে। এই ব্যবহারকারী-নির্দিষ্ট পার্টিশন কীটি ঐচ্ছিকভাবে একটি প্রাথমিক কী উপস্থাপন করার জন্য একটি সাজানোর কী-র সাথে একত্রিত করা যেতে পারে। প্রাথমিক কী একটি সূচী হিসাবে কাজ করে, কোয়েরি অপারেশনগুলিকে সস্তা করে তোলে। একটি কোয়েরি অপারেশন পার্টিশন কী-তে সমতা তুলনা (=) করতে পারে এবং নির্দিষ্ট করা থাকলে বাছাই কী-তে তুলনামূলক ক্রিয়াকলাপ (>, <, =, এর মধ্যে) করতে পারে।
উপরোক্ত স্কিম দ্বারা কভার না করা বিশ্লেষণাত্মক প্রশ্নগুলি সম্পাদন করার জন্য একটি স্ক্যান অপারেশন ব্যবহার করা প্রয়োজন, যা সাধারণত সমান্তরালভাবে সমগ্র DynamoDB টেবিল স্ক্যান করার মাধ্যমে সম্পাদিত হয়। এই স্ক্যানগুলি পড়ার থ্রুপুট পরিপ্রেক্ষিতে ধীর এবং ব্যয়বহুল হতে পারে কারণ তাদের সম্পূর্ণ টেবিলের সম্পূর্ণ পাঠ প্রয়োজন। টেবিলের আকার বাড়লে স্ক্যানগুলিও ধীর হয়ে যায়, কারণ ফলাফল তৈরি করতে স্ক্যান করার জন্য আরও ডেটা থাকে। আমরা যদি নিষেধাজ্ঞামূলক স্ক্যান খরচের সম্মুখীন না হয়ে বিশ্লেষণাত্মক প্রশ্নগুলিকে সমর্থন করতে চাই, তাহলে আমরা সেকেন্ডারি ইনডেক্সের সুবিধা নিতে পারি, যা আমরা পরবর্তী আলোচনা করব।
DynamoDB-তে, সেকেন্ডারি ইনডেক্সগুলি প্রায়শই জিজ্ঞাসা করা হয় এমন ক্ষেত্রগুলিকে ইন্ডেক্স করে অ্যাপ্লিকেশন কার্যক্ষমতা উন্নত করতে ব্যবহৃত হয়। সেকেন্ডারি ইনডেক্সের উপর ক্যোয়ারী অপারেশনগুলিকে বিশ্লেষণাত্মক ক্যোয়ারীগুলির মাধ্যমে নির্দিষ্ট বৈশিষ্ট্যগুলিকে শক্তিশালী করতেও ব্যবহার করা যেতে পারে যা প্রয়োজনীয়তাগুলি স্পষ্টভাবে সংজ্ঞায়িত করেছে।
সেকেন্ডারি ইনডেক্সে পার্টিশন কী এবং ঐচ্ছিক বাছাই কী তৈরি করা থাকে যে ক্ষেত্রগুলিতে আমরা অনুসন্ধান করতে চাই। সেকেন্ডারি ইনডেক্স দুই ধরনের আছে:
স্থানীয় সেকেন্ডারি ইনডেক্স (LSIs): LSIs একটি একক পার্টিশনের জন্য হ্যাশ এবং রেঞ্জ কী বৈশিষ্ট্যগুলিকে প্রসারিত করে।
গ্লোবাল সেকেন্ডারি ইনডেক্স (GSIs): GSI হল সূচী যা একটি একক পার্টিশনের পরিবর্তে একটি সম্পূর্ণ টেবিলে প্রয়োগ করা হয়।
যাইহোক, নাইকি যেমন আবিষ্কার করেছে , DynamoDB-তে GSI-এর অতিরিক্ত ব্যবহার ব্যয়বহুল হতে পারে। ডাইনামোডিবি-তে অ্যানালিটিক্স, যদি না সেগুলিকে শুধুমাত্র খুব সাধারণ পয়েন্ট লুকআপ বা ছোট পরিসরের স্ক্যানের জন্য ব্যবহার করা হয়, ফলে সেকেন্ডারি ইনডেক্সের অত্যধিক ব্যবহার এবং উচ্চ খরচ হতে পারে।
সূচী ব্যবহার করার সময় প্রভিশন করা ক্ষমতার খরচ দ্রুত বাড়তে পারে কারণ বেস টেবিলের সমস্ত আপডেট সংশ্লিষ্ট GSI-তেও করতে হবে। প্রকৃতপক্ষে, AWS পরামর্শ দেয় যে একটি বৈশ্বিক সেকেন্ডারি সূচকের জন্য নির্ধারিত লেখার ক্ষমতা বেস টেবিলের লেখার ক্ষমতার সমান বা তার বেশি হওয়া উচিত যাতে বেস টেবিলে লেখা থ্রটলিং এড়াতে এবং অ্যাপ্লিকেশনটিকে বিকল না করে। কনফিগার করা জিএসআই-এর সংখ্যার সাথে প্রভিশনড লেখার ক্ষমতার খরচ রৈখিকভাবে বৃদ্ধি পায়, অনেকগুলি অ্যাক্সেস প্যাটার্ন সমর্থন করার জন্য অনেকগুলি জিএসআই ব্যবহার করা ব্যয়কে নিষিদ্ধ করে তোলে।
DynamoDB এছাড়াও অ্যারে এবং অবজেক্ট সহ নেস্টেড স্ট্রাকচারে ডেটা সূচক করার জন্য ভালভাবে ডিজাইন করা হয়নি। ডেটা ইন্ডেক্স করার আগে, ব্যবহারকারীদের ডাটা ডিনরমালাইজ করতে হবে, নেস্টেড অবজেক্ট এবং অ্যারে সমতল করতে হবে। এটি লেখার সংখ্যা এবং সংশ্লিষ্ট খরচ অনেক বাড়িয়ে দিতে পারে।
বিশ্লেষণের জন্য DynamoDB সেকেন্ডারি ইনডেক্স ব্যবহার করার আরও বিস্তারিত পরীক্ষার জন্য, আমাদের ব্লগ দেখুন সেকেন্ডারি ইনডেক্স ফর অ্যানালিটিক্স অন ডাইনামোডিবি ।
নীচের লাইন হল যে বিশ্লেষণাত্মক ব্যবহারের ক্ষেত্রে, আপনি একটি ভিন্ন টুল বা পরিষেবার সাথে DynamoDB টেবিল সিঙ্ক করে উল্লেখযোগ্য কর্মক্ষমতা এবং খরচ সুবিধা পেতে পারেন যা জটিল বিশ্লেষণ দক্ষতার সাথে চালানোর জন্য একটি বাহ্যিক সেকেন্ডারি সূচক হিসাবে কাজ করে।
আমাদের ডেটার উপর একটি গৌণ সূচক তৈরি করার একটি পদ্ধতি হল ইলাস্টিকসার্চের সাথে DynamoDB ব্যবহার করা। ক্লাউড-ভিত্তিক ইলাস্টিকসার্চ, যেমন ইলাস্টিক ক্লাউড বা অ্যামাজন ওপেনসার্চ পরিষেবা, সূচীগুলির আকার, প্রতিলিপি এবং অন্যান্য প্রয়োজনীয়তা অনুসারে নোডগুলির বিধান এবং কনফিগার করতে ব্যবহার করা যেতে পারে। একটি পরিচালিত ক্লাস্টারের আপগ্রেড, সুরক্ষিত এবং পারফরম্যান্ট রাখার জন্য কিছু ক্রিয়াকলাপ প্রয়োজন, তবে EC2 দৃষ্টান্তে এটি সম্পূর্ণরূপে নিজের দ্বারা চালানোর চেয়ে কম।
যেহেতু Amazon DynamoDB-এর জন্য Logstash Plugin ব্যবহার করার পদ্ধতিটি অসমর্থিত এবং সেট আপ করা বেশ কঠিন, তাই আমরা পরিবর্তে DynamoDB স্ট্রিম এবং একটি AWS Lambda ফাংশন ব্যবহার করে DynamoDB থেকে ইলাস্টিকসার্চে লেখা স্ট্রিম করতে পারি। এই পদ্ধতির জন্য আমাদের দুটি পৃথক পদক্ষেপ করতে হবে:
আমরা আমাদের টেবিলে কোন লেখা মিস না করি তা নিশ্চিত করার জন্য আমাদের অবশ্যই সঠিক অনুমতির সাথে এই ল্যাম্বডা ফাংশন দুটি লিখতে এবং তারের আপ করতে হবে। যখন সেগুলি প্রয়োজনীয় পর্যবেক্ষণের সাথে সেট আপ করা হয়, তখন আমরা DynamoDB থেকে ইলাস্টিকসার্চে নথি পেতে পারি এবং ডেটাতে বিশ্লেষণাত্মক প্রশ্নগুলি চালানোর জন্য ইলাস্টিকসার্চ ব্যবহার করতে পারি।
এই পদ্ধতির সুবিধা হল যে Elasticsearch সম্পূর্ণ-টেক্সট সূচীকরণ এবং বিভিন্ন ধরণের বিশ্লেষণাত্মক প্রশ্ন সমর্থন করে। ইলাস্টিকসার্চ ভিজ্যুয়ালাইজেশনের জন্য কিবানার মতো বিভিন্ন ভাষা এবং টুলে ক্লায়েন্টদের সমর্থন করে যা দ্রুত ড্যাশবোর্ড তৈরি করতে সাহায্য করতে পারে। যখন একটি ক্লাস্টার সঠিকভাবে কনফিগার করা হয়, তখন ইলাস্টিকসার্চে প্রবাহিত ডেটার উপর দ্রুত বিশ্লেষণাত্মক প্রশ্নের জন্য কোয়েরি লেটেন্সিগুলি টিউন করা যেতে পারে।
অসুবিধাগুলির মধ্যে রয়েছে যে সমাধানটির সেটআপ এবং রক্ষণাবেক্ষণের খরচ বেশি হতে পারে। এমনকি পরিচালিত ইলাস্টিকসার্চের জন্য অন্তর্নিহিত দৃষ্টান্তগুলির প্রতিলিপিকরণ, পুনঃশার্ডিং, সূচক বৃদ্ধি এবং পারফরম্যান্স টিউনিংয়ের সাথে কাজ করতে হবে।
ইলাস্টিকসার্চের একটি শক্তভাবে সংযুক্ত আর্কিটেকচার রয়েছে যা গণনা এবং স্টোরেজকে আলাদা করে না। এর অর্থ সম্পদগুলি প্রায়শই অতিরিক্ত ব্যবস্থা করা হয় কারণ সেগুলি স্বাধীনভাবে মাপানো যায় না। উপরন্তু, একাধিক কাজের চাপ, যেমন পড়া এবং লেখা, একই গণনা সংস্থানের জন্য লড়াই করবে।
ইলাস্টিক সার্চও দক্ষতার সাথে আপডেটগুলি পরিচালনা করতে পারে না। যেকোন ক্ষেত্র আপডেট করলে পুরো নথির পুনঃসূচীকরণ শুরু হবে। ইলাস্টিকসার্চ নথিগুলি অপরিবর্তনীয়, তাই যে কোনও আপডেটের জন্য একটি নতুন নথির সূচীকরণের প্রয়োজন হয় এবং পুরানো সংস্করণটি মুছে ফেলা হয়। এর ফলে অতিরিক্ত গণনা করা হয় এবং I/O এমনকি অপরিবর্তিত ক্ষেত্রগুলিকে পুনঃসূচীকরণ করতে এবং আপডেটের পরে সম্পূর্ণ নথি লেখার জন্য ব্যয় করা হয়।
কারণ ল্যাম্বডাস ফায়ার যখন তারা DynamoDB স্ট্রীমে একটি আপডেট দেখে, তখন ঠান্ডা শুরু হওয়ার কারণে তাদের লেটেন্সি স্পাইক থাকতে পারে। এটি DynamoDB স্ট্রীম থেকে সঠিকভাবে ইভেন্টগুলি প্রক্রিয়া করছে এবং ইলাস্টিকসার্চে লিখতে সক্ষম তা নিশ্চিত করার জন্য সেটআপের জন্য মেট্রিক্স এবং মনিটরিং প্রয়োজন৷
কার্যকরীভাবে, বিশ্লেষণাত্মক প্রশ্নের পরিপ্রেক্ষিতে, ইলাস্টিকসার্চে যোগদানের জন্য সমর্থন নেই , যা একাধিক সূচক জড়িত জটিল বিশ্লেষণাত্মক প্রশ্নের জন্য দরকারী। ইলাস্টিকসার্চ ব্যবহারকারীদের প্রায়শই ডেটা ডিনরমালাইজ করতে হয়, অ্যাপ্লিকেশন-সাইড জয়েন করতে হয়, বা নেস্টেড অবজেক্ট বা পিতামাতা-সন্তানের সম্পর্ক ব্যবহার করতে হয় এই সীমাবদ্ধতাকে ঘিরে।
সুবিধাদি
অসুবিধা
কিবানা ব্যবহার করে DynamoDB এবং ড্যাশবোর্ডে ডেটার উপর পূর্ণ-পাঠ্য অনুসন্ধান প্রয়োগ করার সময় এই পদ্ধতিটি ভাল কাজ করতে পারে। যাইহোক, উৎপাদনে একটি ইলাস্টিকসার্চ ক্লাস্টার টিউন এবং বজায় রাখার জন্য প্রয়োজনীয় ক্রিয়াকলাপ, এর সংস্থানগুলির অদক্ষ ব্যবহার এবং যোগদানের ক্ষমতার অভাব চ্যালেঞ্জিং হতে পারে।
রকসেট হল একটি সম্পূর্ণরূপে পরিচালিত অনুসন্ধান এবং বিশ্লেষণ ডাটাবেস যা প্রাথমিকভাবে উচ্চ QPS প্রয়োজনীয়তা সহ রিয়েল-টাইম অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য নির্মিত। এটি প্রায়ই OLTP ডাটাবেস থেকে ডেটার জন্য একটি বহিরাগত সেকেন্ডারি সূচক হিসাবে ব্যবহৃত হয়।
রকসেটে DynamoDB এর সাথে একটি অন্তর্নির্মিত সংযোগকারী রয়েছে যা DynamoDB এবং Rockset এর মধ্যে ডেটা সিঙ্ক রাখতে ব্যবহার করা যেতে পারে। আমরা যে DynamoDB টেবিল থেকে বিষয়বস্তু সিঙ্ক করতে চাই তা নির্দিষ্ট করতে পারি এবং একটি রকসেট সংগ্রহ যা টেবিলটিকে ইন্ডেক্স করে। রকসেট একটি সম্পূর্ণ স্ন্যাপশটে DynamoDB টেবিলের বিষয়বস্তুগুলিকে সূচী করে এবং তারপরে নতুন পরিবর্তনগুলি হওয়ার সাথে সাথে সিঙ্ক করে। রকসেট সংগ্রহের বিষয়বস্তু সবসময় DynamoDB উৎসের সাথে সিঙ্ক হয়; স্থির অবস্থায় কয়েক সেকেন্ডের বেশি নয়।
রকসেট স্ট্রিমের অবস্থা পর্যবেক্ষণ করে এবং DynamoDB থেকে স্ট্রিমিং পরিবর্তনগুলিতে দৃশ্যমানতা প্রদান করে স্বয়ংক্রিয়ভাবে DynamoDB টেবিল এবং রকেট সংগ্রহের মধ্যে ডেটা অখণ্ডতা এবং ধারাবাহিকতা পরিচালনা করে।
একটি স্কিমা সংজ্ঞা ছাড়া, একটি রকসেট সংগ্রহ স্বয়ংক্রিয়ভাবে খাপ খাইয়ে নিতে পারে যখন ক্ষেত্রগুলি যুক্ত/মুছে ফেলা হয়, বা যখন ডাইনামোডিবি-তে ডেটার গঠন/প্রকার পরিবর্তন হয়। এটি শক্তিশালী গতিশীল টাইপিং এবংস্মার্ট স্কিমা দ্বারা সম্ভব হয়েছে যা যেকোন অতিরিক্ত ETL এর প্রয়োজনীয়তা দূর করে।
আমরা DynamoDB থেকে যে রকসেট সংগ্রহ করেছি তা অনুসন্ধানের জন্য SQL সমর্থন করে এবং বিকাশকারীরা ডোমেন-নির্দিষ্ট ভাষা না শিখে সহজেই ব্যবহার করতে পারে। এটি একটি REST API এর মাধ্যমে অ্যাপ্লিকেশনগুলিতে প্রশ্নগুলি পরিবেশন করতে বা বিভিন্ন প্রোগ্রামিং ভাষায় ক্লায়েন্ট লাইব্রেরি ব্যবহার করতেও ব্যবহার করা যেতে পারে। ANSI SQL-এর সুপারসেট যা রকসেট সমর্থন করে তা গভীরভাবে নেস্টেড JSON অ্যারে এবং অবজেক্টগুলিতে নেটিভভাবে কাজ করতে পারে এবং এমনকি জটিল বিশ্লেষণাত্মক প্রশ্নগুলিতে মিলিসেকেন্ড লেটেন্সি পেতে সমস্ত ক্ষেত্রে স্বয়ংক্রিয়ভাবে তৈরি হওয়া সূচীগুলিকে লিভারেজ করতে পারে৷
রকসেট কম্পিউট-কম্পিউট সেপারেশনের পথপ্রদর্শক করেছে, যা একই অন্তর্নিহিত রিয়েল-টাইম ডেটা শেয়ার করার সময় আলাদা কম্পিউট ইউনিটে ওয়ার্কলোডকে বিচ্ছিন্ন করার অনুমতি দেয়। একই ডেটা সেটে একযোগে ইনজেশন এবং ক্যোয়ারী বা একাধিক অ্যাপ্লিকেশন সমর্থন করার সময় এটি ব্যবহারকারীদের আরও বেশি সম্পদ দক্ষতা প্রদান করে।
এছাড়াও, রকসেট নিরাপত্তা, ডেটা এনক্রিপশন এবং এটিতে অ্যাক্সেস পরিচালনার জন্য ভূমিকা-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণের যত্ন নেয়। রকসেট ব্যবহারকারীরা ETL-এর প্রয়োজনীয়তা এড়াতে পারে ইনজেস্ট ট্রান্সফরমেশনের ব্যবহার করে যা আমরা রকসেটে সেট আপ করতে পারি ডাটা সংগ্রহে আসার সাথে সাথে পরিবর্তন করতে। ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে পুরানো ডেটা মুছে ফেলার জন্য ধারণ নীতি সেট আপ করে ডেটার জীবনচক্রকে ঐচ্ছিকভাবে পরিচালনা করতে পারেন। ডেটা ইনজেশন এবং ক্যোয়ারী সার্ভিং উভয়ই স্বয়ংক্রিয়ভাবে পরিচালিত হয়, যা আমাদের অবকাঠামো ব্যবস্থাপনা এবং ক্রিয়াকলাপের প্রয়োজনীয়তা দূর করার সময় লাইভ ড্যাশবোর্ড এবং অ্যাপ্লিকেশন তৈরি এবং স্থাপনে ফোকাস করতে দেয়।
বিশেষ করে DynamoDB-এর সাথে সিঙ্ক করার ক্ষেত্রে প্রাসঙ্গিক, রকসেট ইন-প্লেস ফিল্ড-লেভেল আপডেটগুলিকে সমর্থন করে, যাতে ব্যয়বহুল রিইন্ডেক্সিং এড়ানো যায়। কাজের জন্য সঠিক টুল বেছে নিতে রকসেট এবং ইলাস্টিকসার্চকে ইনজেশন, কোয়েরি এবং দক্ষতার সাথে তুলনা করুন ।
আমরা কোন অপারেশনাল, স্কেলিং, বা রক্ষণাবেক্ষণের উদ্বেগ ছাড়াই ডায়নামোডিবি-তে ডেটার উপর রিয়েল-টাইম বিশ্লেষণ বাস্তবায়নের জন্য রকসেট ব্যবহার করতে পারি। এটি রিয়েল-টাইম অ্যাপ্লিকেশনগুলির বিকাশকে উল্লেখযোগ্যভাবে ত্বরান্বিত করতে পারে। আপনি যদি Rockset ব্যবহার করে DynamoDB ডেটাতে আপনার অ্যাপ্লিকেশন তৈরি করতে চান, তাহলে আপনি এখানে বিনামূল্যে শুরু করতে পারেন।