গ্রাহকের প্রত্যাশা এবং অ্যাপ্লিকেশনগুলির সাথে সম্পর্কিত চাহিদা কখনও বেশি ছিল না। ব্যবহারকারীরা আশা করে যে অ্যাপ্লিকেশনগুলি দ্রুত, নির্ভরযোগ্য এবং উপলব্ধ হবে। আরও, ডেটা রাজা, এবং ব্যবহারকারীরা অন্তর্দৃষ্টি খোঁজার জন্য প্রয়োজন অনুসারে একত্রিত ডেটাকে টুকরো টুকরো করতে এবং ডাইস করতে সক্ষম হতে চান। ব্যবহারকারীরা ডেটা ইঞ্জিনিয়ারদের নতুন সূচী প্রদান বা নতুন ETL চেইন তৈরি করার জন্য অপেক্ষা করতে চান না। তারা উপলব্ধ নতুন ডেটাতে নিরবচ্ছিন্ন অ্যাক্সেস চায়। কিন্তু আপনার সমস্ত অ্যাপ্লিকেশন প্রয়োজনীয়তা পরিচালনা করা যে কোনো একক ডাটাবেসের জন্য একটি লম্বা কাজ। ডাটাবেসের জন্য, স্বতন্ত্র রেকর্ডে ঘন ঘন, কম লেটেন্সি অপারেশনের জন্য অপ্টিমাইজ করা অনেক রেকর্ড জুড়ে কম ঘন ঘন একত্রিতকরণ বা ভারী ফিল্টারিংয়ের জন্য অপ্টিমাইজ করা থেকে আলাদা। অনেক সময়, আমরা একই ডাটাবেসের সাথে উভয় প্যাটার্ন পরিচালনা করার চেষ্টা করি এবং আমাদের অ্যাপ্লিকেশন স্কেলগুলির মতো অসঙ্গত কর্মক্ষমতা মোকাবেলা করি। আমরা মনে করি আমরা ন্যূনতম প্রচেষ্টা বা খরচের জন্য অপ্টিমাইজ করছি, যখন আসলে আমরা বিপরীত করছি। একটি OLTP ডাটাবেসে অ্যানালিটিক্স চালানোর জন্য সাধারণত প্রয়োজন হয় যে আমরা ট্রাফিকের শিখরগুলির জন্য অ্যাকাউন্টের জন্য একটি ডাটাবেসের অতিরিক্ত ব্যবস্থা করি। এটি অনেক টাকা খরচ করে এবং সাধারণত একটি আনন্দদায়ক শেষ ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে ব্যর্থ হয়। এই ওয়াকথ্রুতে, আমরা দেখব কীভাবে এই উভয় অ্যাক্সেস প্যাটার্নের মাধ্যমে ব্যবহারকারীদের উচ্চ চাহিদাগুলি পরিচালনা করা যায়। আমরা একটি আর্থিক অ্যাপ্লিকেশন তৈরি করব যেখানে ব্যবহারকারীরা লেনদেন রেকর্ড করছে এবং সাম্প্রতিক লেনদেনগুলি দেখছে এবং তাদের অতীতের লেনদেনে জটিল ফিল্টারিং বা সমষ্টিও চায়। একটি হাইব্রিড পদ্ধতি আমাদের অ্যাপ্লিকেশনের প্রয়োজনগুলি পরিচালনা করতে, আমরা সাথে ব্যবহার করব। DynamoDB আমাদের মূল লেনদেন অ্যাক্সেস প্যাটার্নগুলি পরিচালনা করবে -- রেকর্ডিং লেনদেন এবং ব্যবহারকারীদের ব্রাউজ করার জন্য সাম্প্রতিক লেনদেনের একটি ফিড প্রদান করে। রকেট আমাদের ডাটা-ভারী, "আনন্দজনক" অ্যাক্সেস প্যাটার্নগুলি পরিচালনা করতে DynamoDB এর পরিপূরক করবে। আমরা আমাদের ব্যবহারকারীদের সময়, বণিক, বিভাগ বা অন্যান্য ক্ষেত্র দ্বারা প্রাসঙ্গিক লেনদেন খুঁজে বের করতে বা সময়ের সাথে ব্যয়ের প্রবণতা দেখতে শক্তিশালী সমষ্টি সম্পাদন করতে দেব। রকসেটের Amazon DynamoDB আমরা এই প্যাটার্নগুলির মাধ্যমে কাজ করার সময়, আমরা দেখব যে এই সিস্টেমগুলির প্রতিটি কীভাবে হাতের কাজের জন্য উপযুক্ত। DynamoDB মূল OLTP ক্রিয়াকলাপগুলিতে পারদর্শী - একটি পৃথক আইটেম পড়া বা লেখা, বা পরিচিত ফিল্টারগুলির উপর ভিত্তি করে একটি ক্রমিক আইটেম আনা। প্রাথমিক কী-এর উপর ভিত্তি করে ডেটা যেভাবে বিভাজন করে তার কারণে, DynamoDB যেকোনো স্কেলে এই ধরনের প্রশ্নের জন্য সামঞ্জস্যপূর্ণ কর্মক্ষমতা প্রদান করতে সক্ষম। বিপরীতভাবে, রকসেট প্রচুর পরিমাণে ডেটা ক্রমাগত ইনজেশন করে এবং সেই ডেটাতে একাধিক ইন্ডেক্সিং কৌশল প্রয়োগ করে অত্যন্ত নির্বাচনী ফিল্টারিং, রিয়েল-টাইম বা কোয়েরি-টাইম অ্যাগ্রিগেশন এবং অন্যান্য প্যাটার্ন যা DynamoDB সহজেই পরিচালনা করতে পারে না। আমরা এই উদাহরণের মাধ্যমে কাজ করার সময়, আমরা দুটি সিস্টেমের অন্তর্নিহিত মৌলিক ধারণার পাশাপাশি আমাদের লক্ষ্য অর্জনের জন্য ব্যবহারিক পদক্ষেপ উভয়ই শিখব। আপনি ব্যবহার করে অ্যাপ্লিকেশনটি অনুসরণ করতে পারেন। GitHub রেপো DynamoDB এর সাথে মূল বৈশিষ্ট্যগুলি বাস্তবায়ন করা আমরা আমাদের অ্যাপ্লিকেশনের মূল বৈশিষ্ট্যগুলি বাস্তবায়ন করে এই ওয়াকথ্রু শুরু করব। এটি যেকোন অ্যাপ্লিকেশনের জন্য একটি সাধারণ সূচনা বিন্দু, কারণ আপনি পৃথক রেকর্ডগুলি ম্যানিপুলেট করার ক্ষমতা প্রদান করতে এবং সম্পর্কিত রেকর্ডগুলির একটি সেট তালিকাবদ্ধ করার জন্য আদর্শ "CRUDL" অপারেশনগুলি তৈরি করেন৷ একটি ই-কমার্স অ্যাপ্লিকেশনের জন্য, এটি একটি অর্ডার দেওয়ার কার্যকারিতা এবং আগের অর্ডারগুলি দেখতে হবে৷ একটি সোশ্যাল মিডিয়া অ্যাপ্লিকেশানের জন্য, এটি পোস্ট তৈরি করা, বন্ধুদের যোগ করা বা আপনি অনুসরণ করা লোকেদের দেখা। এই কার্যকারিতাটি সাধারণত ডাটাবেস দ্বারা প্রয়োগ করা হয় যা ওয়ার্কফ্লোতে বিশেষজ্ঞ যা অল্প সংখ্যক সারিগুলির বিরুদ্ধে অনেক সমসাময়িক ক্রিয়াকলাপের উপর জোর দেয়। অনলাইন লেনদেন প্রক্রিয়াকরণ (OLTP) এই উদাহরণের জন্য, আমরা একটি ব্যবসায়িক ফাইন্যান্স অ্যাপ্লিকেশন তৈরি করছি যেখানে একজন ব্যবহারকারী অর্থপ্রদান করতে এবং গ্রহণ করতে পারে, সেইসাথে তাদের লেনদেনের ইতিহাস দেখতে পারে। উদাহরণটি ইচ্ছাকৃতভাবে এই ওয়াকথ্রুটির জন্য সরলীকৃত করা হবে, তবে আপনি আমাদের অ্যাপ্লিকেশনের জন্য তিনটি মূল অ্যাক্সেস প্যাটার্নের কথা ভাবতে পারেন: , যা ব্যবসার দ্বারা প্রদত্ত বা প্রাপ্ত পেমেন্টের একটি রেকর্ড সংরক্ষণ করবে; রেকর্ড লেনদেন , যা ব্যবহারকারীদের একটি ব্যবসার দ্বারা করা এবং প্রাপ্ত সাম্প্রতিকতম অর্থপ্রদানগুলি দেখতে দেয়; এবং তারিখের পরিসর অনুসারে লেনদেনগুলি দেখুন , যা একজন ব্যবহারকারীকে একটি একক লেনদেনের সুনির্দিষ্ট বিষয়ে ড্রিল করার অনুমতি দেবে। স্বতন্ত্র লেনদেন দেখুন এই অ্যাক্সেস প্যাটার্নগুলির প্রতিটি একটি সমালোচনামূলক, উচ্চ-ভলিউম অ্যাক্সেস প্যাটার্ন। আমরা ক্রমাগত ব্যবহারকারীদের জন্য লেনদেন রেকর্ড করব, এবং যখন তারা অ্যাপ্লিকেশন খুলবে তখন লেনদেন ফিডটি প্রথম দেখা হবে। আরও, এই অ্যাক্সেস প্যাটার্নগুলির প্রতিটি প্রাসঙ্গিক রেকর্ড (গুলি) আনার জন্য পরিচিত, সামঞ্জস্যপূর্ণ প্যারামিটার ব্যবহার করবে। আমরা এই অ্যাক্সেস প্যাটার্নগুলি পরিচালনা করতে DynamoDB ব্যবহার করব। DynamoDB হল AWS দ্বারা প্রদত্ত একটি NoSQL ডাটাবেস। এটি একটি সম্পূর্ণরূপে পরিচালিত ডাটাবেস, এবং এটি উচ্চ-স্কেল অ্যাপ্লিকেশন এবং সার্ভারহীন অ্যাপ্লিকেশন উভয় ক্ষেত্রেই জনপ্রিয়তা বৃদ্ধি পাচ্ছে। DynamoDB-এর সবচেয়ে অনন্য বৈশিষ্ট্যগুলির মধ্যে একটি হল এটি কীভাবে যে কোনও স্কেলে ধারাবাহিক কর্মক্ষমতা প্রদান করে। আপনার টেবিল 1 মেগাবাইট বা 1 পেটাবাইট হোক না কেন, আপনার অপারেশনের জন্য একই প্রতিক্রিয়া সময় দেখতে হবে। এটি মূল, OLTP ব্যবহারের ক্ষেত্রে একটি পছন্দসই গুণমান যেমন আমরা এখানে প্রয়োগ করছি। এটি একটি মহান এবং মূল্যবান ইঞ্জিনিয়ারিং কৃতিত্ব, তবে এটি বোঝা গুরুত্বপূর্ণ যে এটি যে ধরণের প্রশ্নগুলি ভালভাবে সম্পাদন করবে সেগুলি সম্পর্কে নির্বাচন করার মাধ্যমে অর্জন করা হয়েছিল৷ DynamoDB দুটি মূল নকশা সিদ্ধান্তের মাধ্যমে এই সামঞ্জস্যপূর্ণ কর্মক্ষমতা প্রদান করতে সক্ষম। প্রথমত, আপনার DynamoDB টেবিলের প্রতিটি রেকর্ডে একটি প্রাথমিক কী অন্তর্ভুক্ত করতে হবে। এই প্রাথমিক কীটি একটি পার্টিশন কী এবং একটি ঐচ্ছিক বাছাই কী দ্বারা গঠিত। DynamoDB-এর জন্য দ্বিতীয় মূল নকশার সিদ্ধান্ত হল যে API প্রাথমিক কী-এর ব্যবহারকে ব্যাপকভাবে প্রয়োগ করে - এই বিষয়ে পরে আরও। নীচের ছবিতে, আমাদের ফিনটেক অ্যাপ্লিকেশনে কিছু নমুনা লেনদেনের ডেটা রয়েছে। আমাদের টেবিলটি আমাদের অ্যাপ্লিকেশনে প্রতিষ্ঠানের নামের একটি পার্টিশন কী ব্যবহার করে, সাথে একটি ভিত্তিক বাছাই কী যা একটি UUID-এর স্বতন্ত্রতা এবং সৃষ্টির সময় অনুসারে সাজানোর বৈশিষ্ট্য প্রদান করে যা আমাদের সময়-ভিত্তিক প্রশ্নগুলি করতে দেয়। ULID- আমাদের সারণীতে থাকা রেকর্ডগুলি অন্যান্য বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে, যেমন বণিকের নাম, বিভাগ এবং পরিমাণ, যা আমাদের অ্যাপ্লিকেশনে কার্যকর কিন্তু DynamoDB-এর অন্তর্নিহিত আর্কিটেকচারের জন্য গুরুত্বপূর্ণ নয়। গুরুত্বপূর্ণ অংশটি প্রাথমিক কী এবং বিশেষত পার্টিশন কীটিতে রয়েছে। হুডের নিচে, DynamoDB আপনার ডেটাকে একাধিক স্টোরেজ পার্টিশনে বিভক্ত করবে, প্রতিটিতে আপনার টেবিলের ডেটার একটি উপসেট থাকবে। DynamoDB একটি নির্দিষ্ট স্টোরেজ পার্টিশনে একটি প্রদত্ত রেকর্ড বরাদ্দ করতে প্রাথমিক কী-এর পার্টিশন কী উপাদান ব্যবহার করে। আপনার টেবিলে ডেটার পরিমাণ বা আপনার টেবিলের বিপরীতে ট্র্যাফিক বাড়লে, DynamoDB আপনার ডাটাবেসকে অনুভূমিকভাবে স্কেল করার উপায় হিসাবে পার্টিশন যোগ করবে। উপরে উল্লিখিত হিসাবে, DynamoDB-এর জন্য দ্বিতীয় মূল নকশার সিদ্ধান্ত হল যে API প্রাথমিক কী ব্যবহারকে ব্যাপকভাবে প্রয়োগ করে। DynamoDB-তে প্রায় সমস্ত API অ্যাকশনের জন্য আপনার প্রাথমিক কী-এর অন্তত পার্টিশন কী প্রয়োজন। এই কারণে, DynamoDB সঠিক স্টোরেজ পার্টিশনে যেকোনো অনুরোধ দ্রুত রুট করতে সক্ষম, পার্টিশনের সংখ্যা এবং টেবিলের মোট আকার যাই হোক না কেন। এই দুটি ট্রেডঅফের সাথে, আপনি যেভাবে DynamoDB ব্যবহার করবেন তাতে অবশ্যই সীমাবদ্ধতা রয়েছে। আপনার অ্যাক্সেস প্যাটার্নের জন্য আপনাকে সাবধানে পরিকল্পনা করতে হবে এবং ডিজাইন করতে হবে, কারণ আপনার প্রাথমিক কী আপনার অ্যাক্সেস প্যাটার্নের সাথে জড়িত থাকতে হবে। পরে আপনার অ্যাক্সেস প্যাটার্ন পরিবর্তন করা কঠিন হতে পারে এবং কিছু ম্যানুয়াল মাইগ্রেশন পদক্ষেপের প্রয়োজন হতে পারে। যখন আপনার ব্যবহারের ক্ষেত্রে DynamoDB এর মূল দক্ষতার মধ্যে পড়ে, তখন আপনি সুবিধাগুলি কাটাবেন। স্কেল যাই হোক না কেন আপনি ধারাবাহিক, অনুমানযোগ্য কর্মক্ষমতা পাবেন এবং সময়ের সাথে সাথে আপনার আবেদনের দীর্ঘমেয়াদী অবনতি দেখতে পাবেন না। এছাড়াও, আপনি কম পরিচালন বোঝা সহ একটি সম্পূর্ণরূপে পরিচালিত অভিজ্ঞতা পাবেন, যা আপনাকে ব্যবসার জন্য গুরুত্বপূর্ণ বিষয়গুলিতে ফোকাস করতে দেয়। আমাদের উদাহরণের মূল ক্রিয়াকলাপগুলি এই মডেলের সাথে পুরোপুরি ফিট করে। একটি প্রতিষ্ঠানের জন্য লেনদেনের একটি ফিড পুনরুদ্ধার করার সময়, আমাদের অ্যাপ্লিকেশনে সংস্থার আইডি উপলব্ধ থাকবে যা আমাদের একই পার্টিশন কী সহ রেকর্ডের একটি সংলগ্ন সেট আনতে DynamoDB অপারেশন ব্যবহার করার অনুমতি দেবে। একটি নির্দিষ্ট লেনদেনের অতিরিক্ত বিবরণ পুনরুদ্ধার করতে, কাঙ্খিত আইটেমটি আনার জন্য একটি DynamoDB অনুরোধ করার জন্য আমাদের কাছে সংস্থার আইডি এবং লেনদেন আইডি উভয়ই উপলব্ধ থাকবে। কোয়েরি GetItem আপনি সাথে এই ক্রিয়াকলাপগুলিকে দেখতে পারেন৷ অ্যাপ্লিকেশন স্থাপন করতে নির্দেশাবলী অনুসরণ করুন এবং নমুনা ডেটা সহ এটি বীজ করুন। তারপরে, পৃথক ব্যবহারকারীদের জন্য লেনদেন ফিড আনার জন্য স্থাপন করা পরিষেবাতে HTTP অনুরোধ করুন। সমকালীন অনুরোধের সংখ্যা বা আপনার DynamoDB টেবিলের আকার নির্বিশেষে এই অপারেশনগুলি দ্রুত, দক্ষ অপারেশন হবে। নমুনা অ্যাপ্লিকেশনের রকসেটের সাথে DynamoDB এর পরিপূরক এখন পর্যন্ত, আমরা আমাদের মূল অ্যাক্সেস প্যাটার্নগুলি পরিচালনা করতে DynamoDB ব্যবহার করেছি। DynamoDB এই প্যাটার্নগুলির জন্য দুর্দান্ত কারণ এর কী-ভিত্তিক পার্টিশন যে কোনও স্কেলে সামঞ্জস্যপূর্ণ কর্মক্ষমতা প্রদান করবে। যাইহোক, DynamoDB অন্যান্য অ্যাক্সেস প্যাটার্নগুলি পরিচালনা করতে দুর্দান্ত নয়। DynamoDB আপনাকে প্রাথমিক কী ব্যতীত অন্য গুণাবলী দ্বারা দক্ষতার সাথে অনুসন্ধান করার অনুমতি দেয় না। আপনি অতিরিক্ত বৈশিষ্ট্যগুলির দ্বারা আপনার ডেটা পুনঃসূচীকরণ করতে ব্যবহার করতে পারেন, তবে এটি এখনও সমস্যাযুক্ত হতে পারে যদি আপনার কাছে অনেকগুলি আলাদা বৈশিষ্ট্য থাকে যা আপনার ডেটা সূচীকরণে ব্যবহার করা যেতে পারে। DynamoDB-এর সেকেন্ডারি সূচীগুলি উপরন্তু, DynamoDB বাক্সের বাইরে কোনো একত্রীকরণ কার্যকারিতা প্রদান করে না। আপনি DynamoDB ব্যবহার করে আপনার নিজস্ব সমষ্টি গণনা করতে পারেন, তবে এটি কম নমনীয়তা সহ বা অপ্টিমাইজড পঠন খরচ সহ এমন একটি সমাধানের তুলনায় হতে পারে যা সামনে একত্রিত করার জন্য ডিজাইন করে। এই প্যাটার্নগুলি পরিচালনা করার জন্য, আমরা করব। রকসেটের সাথে DynamoDB এর পরিপূরক আপনার ডেটাতে সূচীগুলির একটি গৌণ সেট হিসাবে রকসেটকে সর্বোত্তম মনে করা হয়। রকসেট ক্যোয়ারী করার সময় শুধুমাত্র এই সূচীগুলি ব্যবহার করে এবং পড়ার সময় DynamoDB-তে কোনো লোড প্রজেক্ট করে না। আপনার অ্যাপ্লিকেশন ক্লায়েন্টদের থেকে ব্যক্তিগত, লেনদেন সংক্রান্ত আপডেটের পরিবর্তে, রকসেট আপনার প্রাথমিক ডেটা স্টোর থেকে ক্রমাগত, স্ট্রিমিং ইনজেশনের জন্য ডিজাইন করা হয়েছে। এটিতে ডায়নামোডিবি, মঙ্গোডিবি, কাফকা এবং অনেক রিলেশনাল ডেটাবেস সহ বেশ কয়েকটি প্রাথমিক ডেটা স্টোরের জন্য সরাসরি সংযোগকারী রয়েছে। যেহেতু রকসেট আপনার প্রাথমিক ডাটাবেস থেকে ডেটা ইনজেস্ট করে, তখন এটি একটি আপনার ডেটাকে ইন্ডেক্স করে, যা থেকে ধারণাগুলি ধার করে: একটি সারি সূচক, একটি উল্টানো সূচক এবং একটি কলামার সূচক৷ অতিরিক্ত সূচী, যেমন পরিসীমা, প্রকার এবং ভূ-স্থানীয় স্বয়ংক্রিয়ভাবে তৈরি করা হয় ডেটা প্রকারের উপর ভিত্তি করে। আমরা নীচে এই সূচীগুলির সুনির্দিষ্ট বিষয়ে আলোচনা করব, তবে এই রূপান্তরিত সূচক আপনার ডেটাতে আরও নমনীয় অ্যাক্সেস প্যাটার্নের জন্য অনুমতি দেয়। কনভার্জড ইনডেক্সে এটি রকসেটের পিছনে মূল ধারণা -- এটি আপনার প্রাথমিক ডেটাস্টোর থেকে সম্পূর্ণরূপে পরিচালিত, কাছাকাছি-রিয়েল-টাইম ইনজেশন পাইপলাইন ব্যবহার করে আপনার ডেটার একটি মাধ্যমিক সূচক৷ অতিরিক্ত ব্যবহারের কেসগুলি পরিচালনা করার জন্য অন্য সিস্টেমে সন্নিবেশ করার জন্য দলগুলি দীর্ঘদিন ধরে ডায়নামোডিবি থেকে ডেটা বের করে আসছে। রকসেট কীভাবে আপনার টেবিল থেকে ডেটা গ্রহণ করে তার সুনির্দিষ্ট বিষয়ে যাওয়ার আগে, আসুন সংক্ষিপ্তভাবে আলোচনা করি যে কীভাবে রকসেট এই স্থানের অন্যান্য বিকল্পগুলির থেকে আলাদা। রকসেট এবং অন্যান্য পদ্ধতির মধ্যে কয়েকটি মূল পার্থক্য রয়েছে। প্রথমত, রকসেট সম্পূর্ণরূপে পরিচালিত হয়। আপনাকে শুধুমাত্র ডাটাবেস পরিকাঠামো পরিচালনা করতে হবে না, তবে রকসেটে ডেটা বের করতে, রূপান্তরিত করতে এবং লোড করার জন্য আপনাকে পাইপলাইন বজায় রাখতে হবে না। অন্যান্য অনেক সমাধানের সাথে, আপনি আপনার সিস্টেমের মধ্যে "আঠালো" কোডের দায়িত্বে আছেন। এই সিস্টেমগুলি সমালোচনামূলক তবুও ব্যর্থতা-প্রবণ, কারণ আপনাকে অবশ্যই ডেটা কাঠামোর যে কোনও পরিবর্তনের বিরুদ্ধে সুরক্ষামূলকভাবে সতর্ক থাকতে হবে। আপস্ট্রিম পরিবর্তনের ফলে যারা এই সিস্টেমগুলি বজায় রাখে তাদের জন্য নিচের দিকে ব্যথা হতে পারে। দ্বিতীয়ত, রকসেট একটি পরিবর্তনযোগ্য উপায়ে রিয়েল-টাইম ডেটা পরিচালনা করতে পারে। অন্যান্য অনেক সিস্টেমের সাথে, আপনি এক বা অন্যটি পান। আপনি পর্যায়ক্রমিক রপ্তানি এবং আপনার ডেটার বাল্ক-লোড সঞ্চালন করতে পারেন, কিন্তু এর ফলে লোডের মধ্যে বাসি ডেটা হয়। বিকল্পভাবে, আপনি আপনার ডেটা গুদামে ডেটা স্ট্রিম করতে পারেন শুধুমাত্র-সংযোজিত ফ্যাশনে, কিন্তু আপনি ডেটা পরিবর্তন করার ক্ষেত্রে ইন-প্লেস আপডেট করতে পারবেন না। রকসেট বিদ্যমান আইটেমগুলির আপডেটগুলিকে দ্রুত এবং দক্ষতার সাথে পরিচালনা করতে সক্ষম হয় কারণ এটি নতুন ডেটা সন্নিবেশ করায় এবং এইভাবে আপনাকে আপনার পরিবর্তিত ডেটার রিয়েল-টাইম চেহারা দিতে পারে। তৃতীয়ত, রকসেট স্বয়ংক্রিয়ভাবে তার সূচক তৈরি করে। অন্যান্য 'সম্পূর্ণভাবে পরিচালিত' সমাধানগুলির জন্য এখনও আপনাকে সূচীগুলি কনফিগার করতে হবে কারণ আপনার নতুন প্রশ্নগুলিকে সমর্থন করার জন্য তাদের প্রয়োজন। রকসেটের ক্যোয়ারী ইঞ্জিনটি যেকোন এবং সমস্ত প্রশ্নের সমর্থন করার জন্য সূচীগুলির একটি সেট ব্যবহার করার জন্য ডিজাইন করা হয়েছে। আপনি আপনার সিস্টেমে আরও এবং আরও বেশি প্রশ্ন যুক্ত করার সাথে সাথে আপনাকে অতিরিক্ত সূচী যোগ করার দরকার নেই, আরও বেশি স্থান এবং গণনামূলক সংস্থান গ্রহণ করা হবে। এর মানে হল যে অ্যাডহক কোয়েরিগুলি সূচীগুলিকে সম্পূর্ণরূপে লাভ করতে পারে, তাদের সমর্থন করার জন্য কোনও প্রশাসকের জন্য একটি বেসপোক সূচক যুক্ত করার জন্য অপেক্ষা না করেই সেগুলিকে দ্রুত করে তোলে৷ কিভাবে রকসেট ডাইনামোডিবি থেকে ডেটা গ্রহণ করে এখন যেহেতু আমরা রকসেট কী এবং এটি কীভাবে আমাদের সাহায্য করে তার মূল বিষয়গুলি জানি, আসুন আমাদের ডায়নামোডিবি টেবিলটি রকসেটের সাথে সংযুক্ত করি। এটি করার মাধ্যমে, আমরা শিখব কিভাবে রকসেট ইনজেশন প্রক্রিয়া কাজ করে এবং কীভাবে এটি অন্যান্য বিকল্প থেকে আলাদা। রকসেটের অনেকগুলি ডেটা উত্সের জন্য উদ্দেশ্য-নির্মিত সংযোগকারী রয়েছে এবং নির্দিষ্ট সংযোগকারী বাস্তবায়ন আপস্ট্রিম ডেটা উত্সের নির্দিষ্টতার উপর নির্ভর করে। DynamoDB এর সাথে সংযোগের জন্য, রকসেট উপর নির্ভর করে। DynamoDB স্ট্রিমগুলি হল DynamoDB থেকে একটি পরিবর্তন ডেটা ক্যাপচার বৈশিষ্ট্য যেখানে একটি DynamoDB টেবিলের বিরুদ্ধে প্রতিটি লেখার ক্রিয়াকলাপের বিবরণ স্ট্রীমে রেকর্ড করা হয়। স্ট্রিমের গ্রাহকরা ডাউনস্ট্রিম সিস্টেম আপডেট করার জন্য টেবিলের বিপরীতে একই ক্রমে এই পরিবর্তনগুলি প্রক্রিয়া করতে পারে। DynamoDB স্ট্রীমের কাছাকাছি রিয়েল টাইমে একটি DynamoDB টেবিলের সাথে আপ-টু-ডেট থাকার জন্য রকেটের জন্য একটি DynamoDB স্ট্রিম দুর্দান্ত, তবে এটি সম্পূর্ণ গল্প নয়। একটি DynamoDB স্ট্রীমে শুধুমাত্র লেখার ক্রিয়াকলাপের রেকর্ড থাকে যা টেবিলে স্ট্রীম সক্ষম হওয়ার পরে ঘটেছিল। আরও, একটি । স্ট্রীম সক্ষম হওয়ার আগে বা 24 ঘন্টার বেশি আগে ঘটে যাওয়া অপারেশনগুলি স্ট্রীমে উপস্থিত থাকবে না৷ DynamoDB স্ট্রিম শুধুমাত্র 24 ঘন্টার জন্য রেকর্ড ধরে রাখে কিন্তু আপনার প্রশ্নের সঠিক উত্তর দেওয়ার জন্য রকসেটের শুধুমাত্র সাম্প্রতিকতম ডেটা নয়, আপনার ডাটাবেসের সমস্ত ডেটা প্রয়োজন। এটি পরিচালনা করার জন্য, এটি একটি প্রাথমিক বাল্ক রপ্তানি করে (হয় একটি DynamoDB স্ক্যান ব্যবহার করে বা , আপনার টেবিলের আকারের উপর নির্ভর করে) আপনার টেবিলের প্রাথমিক অবস্থা ধরতে। S3 তে রপ্তানি করে সুতরাং, রকসেটের ডায়নামোডিবি সংযোগ প্রক্রিয়ার দুটি অংশ রয়েছে: রকসেটে ইনজেশনের জন্য আপনার সম্পূর্ণ টেবিল রপ্তানি করার জন্য একটি প্রাথমিক, প্রক্রিয়া; বুটস্ট্র্যাপিং আপনার DynamoDB স্ট্রীম থেকে আপডেট গ্রহণ এবং রকসেটে ডেটা আপডেট করার একটি পরবর্তী, প্রক্রিয়া। ক্রমাগত লক্ষ্য করুন যে এই দুটি প্রক্রিয়াই সম্পূর্ণরূপে রকসেট দ্বারা পরিচালিত হয় এবং ব্যবহারকারী হিসাবে আপনার কাছে স্বচ্ছ৷ আপনি এই পাইপলাইন রক্ষণাবেক্ষণের দায়িত্বে থাকবেন না এবং কোনও ত্রুটি থাকলে সতর্কতার প্রতিক্রিয়া জানাবেন। আরও, আপনি যদি প্রাথমিক ইনজেশন প্রক্রিয়ার জন্য S3 রপ্তানি পদ্ধতি বেছে নেন, তাহলে রকসেট ইনজেশন প্রক্রিয়ার কোনোটিই আপনার প্রধান টেবিল থেকে পঠন ক্ষমতা ইউনিট ব্যবহার করবে না। এইভাবে, রকসেট আপনার অ্যাপ্লিকেশন ব্যবহারের ক্ষেত্রে থেকে খরচ গ্রহণ করবে না বা উত্পাদন প্রাপ্যতা প্রভাবিত করবে না। অ্যাপ্লিকেশন: রকসেটের সাথে ডায়নামোডিবি সংযোগ করা আমাদের অ্যাপ্লিকেশনে রকসেট ব্যবহার করার আগে, আসুন আমাদের ডায়নামোডিবি টেবিলের সাথে রকসেটকে সংযুক্ত করি। প্রথমত, আমাদের রকসেট এবং আমাদের টেবিলের মধ্যে একটি নতুন ইন্টিগ্রেশন তৈরি করতে হবে। আমরা নীচের উচ্চ-স্তরের ধাপগুলি দিয়ে হেঁটে যাব, তবে প্রয়োজনে আপনি পেতে পারেন। অ্যাপ্লিকেশন সংগ্রহস্থলে আরও বিস্তারিত ধাপে ধাপে নির্দেশাবলী রকসেট কনসোলে, এই প্রক্রিয়াটি শুরু করতে নেভিগেট করুন। নতুন ইন্টিগ্রেশন উইজার্ডে ইন্টিগ্রেশন উইজার্ডে, আপনার ইন্টিগ্রেশন টাইপ হিসাবে বেছে নিন। তারপরে, পরবর্তী ধাপে যেতে ক্লিক করুন। Amazon DynamoDB শুরুতে DynamoDB ইন্টিগ্রেশন উইজার্ডে আপনার DynamoDB টেবিল অ্যাক্সেস করার জন্য Rockset অনুমোদন করার জন্য ধাপে ধাপে নির্দেশাবলী রয়েছে। এর জন্য আপনার টেবিল রপ্তানির জন্য একটি IAM নীতি, একটি IAM ভূমিকা এবং একটি S3 বালতি তৈরি করা প্রয়োজন৷ আপনি যদি চান তাহলে ম্যানুয়ালি রিসোর্স তৈরি করতে এই নির্দেশাবলী অনুসরণ করতে পারেন। সার্ভারহীন বিশ্বে, আমরা যতটা সম্ভব মাধ্যমে জিনিসগুলি তৈরি করতে পছন্দ করি এবং এতে এই সমর্থনকারী সংস্থানগুলি অন্তর্ভুক্ত রয়েছে। অবকাঠামো-কোডের উদাহরণ সংগ্রহস্থলে রকসেট ইন্টিগ্রেশন রিসোর্স তৈরির জন্য প্রয়োজনীয় অবকাঠামো-কোড অন্তর্ভুক্ত রয়েছে। এগুলি ব্যবহার করতে, প্রথমে রকসেট ইন্টিগ্রেশন উইজার্ডের নীচে রকসেট অ্যাকাউন্ট আইডি এবং বাহ্যিক আইডি মানগুলি খুঁজুন৷ serverless.yml ফাইলের ব্লকের এই মানগুলি কপি এবং পেস্ট করুন। তারপর, এই সংস্থানগুলি তৈরি করতে ৷ custom প্রাসঙ্গিক বিভাগে serverless.yml এর 71 থেকে 122 লাইনে সংস্থানগুলিকে আনকমেন্ট করুন এই নতুন সংস্থানগুলি তৈরি করতে আপনার অ্যাপ্লিকেশন পুনরায় স্থাপন করুন৷ ডিপ্লোয় থেকে আউটপুটগুলিতে, রকেট কনসোলের উপযুক্ত জায়গায় S3 বাকেটের নাম এবং IAM ভূমিকা ARN কপি করে পেস্ট করুন। তারপর, আপনার ইন্টিগ্রেশন সংরক্ষণ করতে সেভ ইন্টিগ্রেশন বোতামে ক্লিক করুন। আপনি আপনার ইন্টিগ্রেশন তৈরি করার পরে, আপনাকে ইন্টিগ্রেশন থেকে একটি তৈরি করতে হবে। রকসেট কনসোলে নেভিগেট করুন এবং একটি সংগ্রহ তৈরি করতে আপনার ইন্টিগ্রেশন ব্যবহার করার পদক্ষেপগুলি অনুসরণ করুন৷ আপনি অ্যাপ্লিকেশন সংগ্রহস্থলে খুঁজে পেতে পারেন। রকেট সংগ্রহ সংগ্রহ তৈরির উইজার্ডে একটি সংগ্রহ তৈরি করার জন্য ধাপে ধাপে নির্দেশাবলীও একবার আপনি এই সংযোগটি সম্পন্ন করার পরে, সাধারণত, সঠিক আকারের দৃষ্টান্তের সেটে, DynamoDB-তে ডেটা সন্নিবেশ, আপডেট বা মুছে ফেলা রকসেটের সূচকে প্রতিফলিত হবে এবং 2 সেকেন্ডেরও কম সময়ের মধ্যে অনুসন্ধানের জন্য উপলব্ধ হবে। জটিল ফিল্টারিংয়ের জন্য রকেট ব্যবহার করা এখন যেহেতু আমরা আমাদের ডায়নামোডিবি টেবিলের সাথে রকসেটকে সংযুক্ত করেছি, আসুন দেখি কিভাবে রকসেট আমাদের বিদ্যমান ডেটাতে নতুন অ্যাক্সেস প্যাটার্ন সক্ষম করতে পারে। আমাদের মূল বৈশিষ্ট্য বিভাগ থেকে স্মরণ করুন যে DynamoDB আপনার প্রাথমিক কীগুলির উপর খুব বেশি ফোকাস করে। দক্ষতার সাথে আপনার ডেটা অ্যাক্সেস করতে আপনাকে আপনার প্রাথমিক কী ব্যবহার করতে হবে। তদনুসারে, আমরা আমাদের প্রাথমিক কীগুলিতে প্রতিষ্ঠানের নাম এবং লেনদেনের সময় ব্যবহার করার জন্য আমাদের টেবিল গঠন করেছি। এই কাঠামোটি আমাদের মূল অ্যাক্সেস প্যাটার্নগুলির জন্য কাজ করে, তবে আমরা ব্যবহারকারীদের তাদের লেনদেন ব্রাউজ করার জন্য আরও নমনীয় উপায় প্রদান করতে চাই। অনেকগুলি দরকারী বৈশিষ্ট্য আছে -- বিভাগ, বণিকের নাম, পরিমাণ ইত্যাদি -- যেগুলি ফিল্টারিংয়ে কার্যকর হতে পারে৷ আমরা আরও বৈশিষ্ট্যগুলিতে ফিল্টারিং সক্ষম করতে DynamoDB-এর সেকেন্ডারি সূচকগুলি ব্যবহার করতে পারি, তবে এটি এখনও এখানে খুব উপযুক্ত নয়। DynamoDB-এর প্রাথমিক কী কাঠামো সহজে নমনীয় অনুসন্ধানের অনুমতি দেয় না যাতে অনেকগুলি, ঐচ্ছিক বৈশিষ্ট্যের সমন্বয় জড়িত থাকে। আপনার কাছে বণিকের নাম এবং তারিখ দ্বারা ফিল্টার করার জন্য একটি গৌণ সূচক থাকতে পারে, তবে আপনি যদি ব্যবসায়ীর নাম, তারিখ এবং পরিমাণ দ্বারা ফিল্টার করার অনুমতি দিতে চান তবে আপনার আরেকটি মাধ্যমিক সূচকের প্রয়োজন হবে৷ একটি অ্যাক্সেস প্যাটার্ন যা বিভাগে ফিল্টার করে একটি তৃতীয় মাধ্যমিক সূচক প্রয়োজন। সেই জটিলতা মোকাবেলা করার পরিবর্তে, আমরা এখানে রকসেটের দিকে ঝুঁকব। আমরা আগে দেখেছি যে রকসেট একাধিক উপায়ে আপনার ডেটা সূচী করতে একটি কনভার্জড ইনডেক্স ব্যবহার করে। সেই উপায়গুলির মধ্যে একটি হল একটি উল্টানো সূচক। একটি উল্টানো সূচকের সাথে, রকসেট প্রতিটি বৈশিষ্ট্য সরাসরি সূচী করে। এই সূচক কিভাবে সংগঠিত হয় লক্ষ্য করুন. প্রতিটি অ্যাট্রিবিউটের নাম এবং মান সূচকের কী হিসাবে ব্যবহার করা হয় এবং মান হল ডকুমেন্ট আইডিগুলির একটি তালিকা যাতে সংশ্লিষ্ট বৈশিষ্ট্যের নাম এবং মান অন্তর্ভুক্ত থাকে। কীগুলি তৈরি করা হয়েছে যাতে তাদের প্রাকৃতিক সাজানোর ক্রম দক্ষতার সাথে পরিসরের প্রশ্নগুলিকে সমর্থন করতে পারে। একটি উল্টানো সূচকটি নির্বাচনী ফিল্টার শর্ত রয়েছে এমন প্রশ্নের জন্য দুর্দান্ত। কল্পনা করুন যে আমরা আমাদের ব্যবহারকারীদের তাদের লেনদেন ফিল্টার করার অনুমতি দিতে চাই যা নির্দিষ্ট মানদণ্ডের সাথে মেলে। ভ্যানডেলে ইন্ডাস্ট্রিজ সংস্থার কেউ সম্প্রতি চিপোটলকে কতবার অর্ডার দিয়েছে তা নিয়ে আগ্রহী। আপনি নিম্নলিখিত হিসাবে একটি প্রশ্নের সাথে এটি খুঁজে পেতে পারেন: SELECT * FROM transactions WHERE organization = 'Vandelay Industries' AND merchant_name = 'Chipotle' যেহেতু আমরা গ্রাহক এবং বণিকের নামের উপর নির্বাচনী ফিল্টার করছি, তাই আমরা দ্রুত মিলিত নথিগুলি খুঁজে পেতে ইনভার্টেড ইনডেক্স ব্যবহার করতে পারি। মিলিত নথির তালিকা খুঁজতে রকসেট ইনভার্টেড ইনডেক্সে অ্যাট্রিবিউটের নাম এবং মান জোড়া দেখতে পাবে। একবার এটিতে এই দুটি তালিকা হয়ে গেলে, এটি উভয় শর্তের সেটের সাথে মেলে এমন রেকর্ডের সেট খুঁজে পেতে এবং ফলাফলগুলি ক্লায়েন্টকে ফেরত দিতে তাদের একত্রিত করতে পারে। যেমন DynamoDB-এর পার্টিশন-ভিত্তিক ইন্ডেক্সিং পার্টিশন কী ব্যবহার করে এমন ক্রিয়াকলাপগুলির জন্য দক্ষ, রকসেটের ইনভার্টেড ইনডেক্স আপনাকে আপনার ডেটা সেটের যে কোনও ক্ষেত্রে, এমনকি এমবেডেড অবজেক্টের বৈশিষ্ট্য বা এমবেডেড অ্যারের ভিতরের মানগুলিতেও দক্ষ লুকআপ দেয়। অ্যাপ্লিকেশন: আপনার অ্যাপ্লিকেশনে রকসেট API ব্যবহার করে এখন যেহেতু আমরা জানি কিভাবে Rockset আমাদের ডেটাসেটের বিরুদ্ধে বাছাই করা প্রশ্নগুলি দক্ষতার সাথে চালাতে পারে, আসুন আমাদের অ্যাপ্লিকেশনে রকসেট প্রশ্নগুলিকে একীভূত করার ব্যবহারিক দিকগুলির মাধ্যমে চলুন। রকসেট RESTful পরিষেবাগুলিকে প্রকাশ করে যা একটি অনুমোদন টোকেন দ্বারা সুরক্ষিত। জনপ্রিয় প্রোগ্রামিং ভাষার জন্যও SDK পাওয়া যায়। এটি সার্ভারহীন অ্যাপ্লিকেশনগুলির সাথে একীভূত করার জন্য এটিকে একটি দুর্দান্ত ফিট করে তোলে কারণ আপনার ডাটাবেস অ্যাক্সেস করার জন্য আপনাকে জটিল ব্যক্তিগত নেটওয়ার্কিং কনফিগারেশন সেট আপ করতে হবে না। আমাদের অ্যাপ্লিকেশনে রকসেট API-এর সাথে ইন্টারঅ্যাক্ট করার জন্য, আমাদের একটি রকসেট API কী প্রয়োজন হবে। আপনি রকসেট কনসোলের একটি তৈরি করতে পারেন। একবার আপনি এটি করে ফেললে, এটির মান আপনার serverless.yml ফাইলে অনুলিপি করুন এবং এটিকে আপনার অ্যাপ্লিকেশনে উপলব্ধ করতে পুনরায় স্থাপন করুন। API কী বিভাগে সাইড নোট: সরলতার জন্য, আমরা এই API কীটিকে পরিবেশ পরিবর্তনশীল হিসাবে ব্যবহার করছি। একটি বাস্তব অ্যাপ্লিকেশনে, আপনার গোপনীয়তা সঞ্চয় করতে এবং পরিবেশের ভেরিয়েবল এড়াতে আপনার বা এর মতো কিছু ব্যবহার করা উচিত। প্যারামিটার স্টোর AWS সিক্রেটস ম্যানেজার আমরা কিভাবে Rockset API এর সাথে ইন্টারঅ্যাক্ট করি তা দেখতে আমাদের দেখুন। ক্লাস ইনিশিয়ালাইজেশন একটি রকসেট ক্লায়েন্ট অবজেক্ট নেয় যা রকসেটে কল করতে ব্যবহার করা হবে। TransactionService ক্লাসটি , রকসেটের সাথে যোগাযোগ করার জন্য আমাদের নিম্নলিখিত প্রশ্ন রয়েছে: আমাদের পরিষেবা শ্রেণীতে ফিল্টার লেনদেন পদ্ধতিতে const response = await this._rocksetClient.queries.query({ sql: { query: ` SELECT * FROM Transactions WHERE organization = :organization AND category = :category AND amount BETWEEN :minAmount AND :maxAmount ORDER BY transactionTime DESC LIMIT 20`, parameters: [ { name: "organization", type: "string", value: organization, }, { name: "category", type: "string", value: category, }, { name: "minAmount", type: "float", value: minAmount, }, { name: "maxAmount", type: "float", value: maxAmount, }, ], }, }); এই মিথস্ক্রিয়া সম্পর্কে উল্লেখ্য দুটি জিনিস আছে. প্রথমত, ব্যবহারকারীদের কাছ থেকে ইনপুট পরিচালনা করার সময় আমরা আমাদের ক্যোয়ারীতে নামযুক্ত প্যারামিটার ব্যবহার করছি। এসকিউএল ইনজেকশন আক্রমণ এড়াতে এসকিউএল ডাটাবেসের সাথে এটি একটি সাধারণ অভ্যাস। দ্বিতীয়ত, SQL কোড আমাদের অ্যাপ্লিকেশন কোডের সাথে মিশে আছে এবং সময়ের সাথে সাথে ট্র্যাক করা কঠিন হতে পারে। এটি কাজ করতে পারে, একটি ভাল উপায় আছে. আমরা আমাদের পরবর্তী ব্যবহারের ক্ষেত্রে প্রয়োগ করার সময়, আমরা আমাদের অ্যাপ্লিকেশনে রকসেট কোয়েরি ল্যাম্বডাস কীভাবে ব্যবহার করব তা দেখব। একত্রিতকরণের জন্য রকসেট ব্যবহার করা এই মুহুর্তে, আমরা ডায়নামোডিবি এবং রকসেটের ইন্ডেক্সিং কৌশলগুলি পর্যালোচনা করেছি কিভাবে ডাটাবেস একটি পৃথক রেকর্ড বা রেকর্ডের সেট খুঁজে পেতে পারে যা একটি নির্দিষ্ট ফিল্টার পূর্বাভাসের সাথে মেলে। উদাহরণস্বরূপ, আমরা দেখেছি যে DynamoDB আপনাকে একটি প্রাথমিক কী ব্যবহার করে একটি রেকর্ড খুঁজে বের করার দিকে ঠেলে দেয়, যেখানে রকসেটের ইনভার্টেড ইনডেক্স অত্যন্ত-নির্বাচিত ফিল্টার শর্তগুলি ব্যবহার করে দক্ষতার সাথে রেকর্ডগুলি খুঁজে পেতে পারে। এই চূড়ান্ত বিভাগে, আমরা সরাসরি সূচীকরণের পরিবর্তে ডেটা বিন্যাসে ফোকাস করার জন্য গিয়ারগুলিকে কিছুটা পরিবর্তন করব। ডেটা লেআউট সম্পর্কে চিন্তা করার সময়, আমরা দুটি পদ্ধতির বিপরীত করব: সারি-ভিত্তিক বনাম কলাম-ভিত্তিক। সারি-ভিত্তিক ডাটাবেস, নামের মতই, সারিগুলিতে ডিস্কে তাদের ডেটা সাজান। PostgreSQL এবং MySQL এর মত বেশিরভাগ রিলেশনাল ডাটাবেস হল সারি ভিত্তিক ডাটাবেস। DynamoDB এর মতো অনেক NoSQL ডাটাবেস, এমনকি তাদের রেকর্ডগুলি রিলেশনাল ডাটাবেস অর্থে প্রযুক্তিগতভাবে "সারি" না হলেও। সারি-ভিত্তিক ডেটাবেসগুলি আমরা এতক্ষণ যে অ্যাক্সেস প্যাটার্নগুলি দেখেছি তার জন্য দুর্দান্ত৷ কিছু ফিল্টার শর্ত অনুযায়ী একটি স্বতন্ত্র লেনদেন বা আইডি দ্বারা লেনদেনের একটি সেট আনার সময়, আমরা সাধারণত চাই প্রতিটি লেনদেনের জন্য সমস্ত ক্ষেত্র ফিরে আসুক। যেহেতু রেকর্ডের সমস্ত ক্ষেত্র একসাথে সংরক্ষণ করা হয়, তাই রেকর্ডটি ফেরত দিতে সাধারণত একটি একক পাঠ লাগে। (দ্রষ্টব্য: এই বিষয়ে কিছু সূক্ষ্মতা একটু পরে আসছে)। একত্রীকরণ সম্পূর্ণ ভিন্ন গল্প। সমষ্টিগত প্রশ্নগুলির সাথে, আমরা একটি সমষ্টি গণনা করতে চাই -- সমস্ত লেনদেনের একটি গণনা, লেনদেনের মোটের যোগফল, বা লেনদেনের একটি সেটের জন্য মাসে গড় খরচ৷ ভ্যানডেলে ইন্ডাস্ট্রিজ সংস্থা থেকে ব্যবহারকারীর কাছে ফিরে, কল্পনা করুন যে তারা গত তিন মাস দেখতে চায় এবং প্রতি মাসের জন্য বিভাগ অনুসারে মোট ব্যয় খুঁজে বের করতে চায়। এই প্রশ্নের একটি সরলীকৃত সংস্করণ নিম্নরূপ দেখাবে: SELECT category, EXTRACT(month FROM transactionTime) AS month, sum(amount) AS amount FROM transactions WHERE organization = 'Vandelay Industries' AND transactionTime > CURRENT_TIMESTAMP() - INTERVAL 3 MONTH GROUP BY category, month ORDER BY category, month DESC এই প্রশ্নের জন্য, প্রচুর সংখ্যক রেকর্ড থাকতে পারে যা ফলাফল গণনা করতে পড়তে হবে। যাইহোক, লক্ষ্য করুন যে আমাদের প্রতিটি রেকর্ডের জন্য আমাদের অনেক ক্ষেত্রের প্রয়োজন নেই। এই ফলাফল নির্ধারণের জন্য আমাদের শুধুমাত্র চারটি প্রয়োজন -- বিভাগ, লেনদেনের সময়, সংস্থা এবং পরিমাণ --। এইভাবে, এই ক্যোয়ারীটি সন্তুষ্ট করার জন্য আমাদের কেবল আরও অনেক রেকর্ড পড়তে হবে তা নয়, আমাদের সারি-ভিত্তিক লেআউটটি আমাদের ফলাফলের জন্য অপ্রয়োজনীয় ক্ষেত্রগুলির একটি গুচ্ছ পড়বে। বিপরীতভাবে, একটি কলাম-ভিত্তিক লেআউট কলামে ডিস্কে ডেটা সঞ্চয় করে। রকসেটের কনভার্জড ইনডেক্স কলাম-ভিত্তিক লেআউটে ডেটা সঞ্চয় করতে একটি কলামার সূচক ব্যবহার করে। একটি কলাম-ভিত্তিক লেআউটে, কলাম দ্বারা ডেটা একত্রে সংরক্ষণ করা হয়। একটি স্বতন্ত্র রেকর্ড সূচীকরণের জন্য তার উপাদান কলামে কাটা হয়। যদি আমার ক্যোয়ারীতে প্রচুর সংখ্যক রেকর্ডের জন্য "অ্যামাউন্ট" অ্যাট্রিবিউট যোগ করার জন্য একটি সমষ্টির প্রয়োজন হয়, রকসেট কলামার সূচকের "পরিমাণ" অংশটি স্ক্যান করে তা করতে পারে। সারি-ভিত্তিক লেআউটের তুলনায় এটি ব্যাপকভাবে পঠিত এবং প্রক্রিয়াকৃত ডেটার পরিমাণ হ্রাস করে। মনে রাখবেন, ডিফল্টরূপে, রকসেটের কলামার সূচক একটি কলামের মধ্যে বৈশিষ্ট্যগুলিকে অর্ডার করতে যাচ্ছে না। যেহেতু আমাদের কাছে ব্যবহারকারী-মুখী ব্যবহারের কেস রয়েছে যা একটি নির্দিষ্ট গ্রাহকের ডেটার উপর কাজ করবে, আমরা কলামার সূচক ব্যবহার করার সময় স্ক্যান করার জন্য ডেটার পরিমাণ কমাতে গ্রাহকের দ্বারা আমাদের কলামার সূচক সংগঠিত করতে পছন্দ করব। রকসেট এটিতে সাহায্য করার জন্য প্রদান করে। ক্লাস্টারিংয়ের মাধ্যমে, আমরা ইঙ্গিত করতে পারি যে আমরা আমাদের কলামার সূচকটিকে "সংস্থা" বৈশিষ্ট্য দ্বারা ক্লাস্টার করতে চাই। এটি কলামার ইনডেক্সের মধ্যে সংস্থার দ্বারা সমস্ত কলামের মানগুলিকে গোষ্ঠীবদ্ধ করবে। এইভাবে, যখন Vandelay Industries তাদের ডেটা একত্রিত করে, রকসেটের ক্যোয়ারী প্রসেসর অন্যান্য গ্রাহকদের জন্য কলামার সূচকের অংশগুলি এড়িয়ে যেতে পারে। আপনার কলামার সূচকে ডেটা ক্লাস্টারিং কীভাবে রকসেটের সারি-ভিত্তিক সূচক প্রক্রিয়াকরণে সহায়তা করে আমাদের অ্যাপ্লিকেশনে কলামার সূচক ব্যবহার করার আগে, আমি রকসেটের কনভার্জড ইনডেক্সের আরেকটি দিক সম্পর্কে কথা বলতে চাই। আগে, আমি উল্লেখ করেছি যে সম্পূর্ণ রেকর্ড পুনরুদ্ধার করার সময় সারি-ভিত্তিক লেআউটগুলি ব্যবহার করা হয়েছিল এবং নির্দেশ করেছিলাম যে DynamoDB এবং আমাদের রকসেট ইনভার্টেড-ইনডেক্স উভয়ই এই লেআউটগুলি ব্যবহার করছে। যে শুধুমাত্র আংশিক সত্য. ইনভার্টেড ইনডেক্সের একটি কলাম-ভিত্তিক সূচকের সাথে কিছু মিল রয়েছে, কারণ এটি যেকোন অ্যাট্রিবিউটের দ্বারা দক্ষ লুকআপের জন্য কলামের নাম এবং মানগুলিকে একত্রে সংরক্ষণ করে। প্রতিটি ইনডেক্স এন্ট্রিতে রেকর্ডের আইডিতে একটি পয়েন্টার থাকে যা প্রদত্ত কলামের নাম এবং মান সমন্বয় অন্তর্ভুক্ত করে। একবার ইনভার্টেড ইনডেক্স থেকে প্রাসঙ্গিক আইডি বা আইডিগুলি আবিষ্কৃত হলে, রকসেট সারি সূচক ব্যবহার করে সম্পূর্ণ রেকর্ড পুনরুদ্ধার করতে পারে। রকসেট ডাটা স্টোরেজ সাইজ ছোট করতে অভিধান এনকোডিং এবং অন্যান্য উন্নত কম্প্রেশন কৌশল ব্যবহার করে। সুতরাং, আমরা এখন দেখেছি কিভাবে রকসেটের রূপান্তরিত সূচক একসাথে ফিট করে: একত্রিতকরণের জন্য একটি নির্দিষ্ট কলামে প্রচুর পরিমাণে মান দ্রুত স্ক্যান করার জন্য ব্যবহৃত হয়; কলাম-ভিত্তিক সূচকটি যেকোন কলামের নাম এবং মানের নির্বাচনী ফিল্টারের জন্য ব্যবহার করা হয়; ইনভার্টেড ইনডেক্স অভিক্ষেপ ধারায় উল্লেখ করা যেতে পারে এমন কোনও অতিরিক্ত বৈশিষ্ট্য আনতে ব্যবহৃত হয়। সারি-ভিত্তিক সূচকটি হুডের নিচে, রকসেটের শক্তিশালী ইন্ডেক্সিং এবং কোয়েরি ইঞ্জিন আপনার ডেটার পরিসংখ্যান ট্র্যাক করছে এবং আপনার ক্যোয়ারীটি দক্ষতার সাথে চালানোর জন্য সর্বোত্তম পরিকল্পনা তৈরি করছে। আবেদন: আপনার অ্যাপ্লিকেশনে রকসেট কোয়েরি ল্যাম্বডাস ব্যবহার করে আসুন আমাদের রকসেট একত্রীকরণ প্রশ্নটি বাস্তবায়ন করি যা কলামার সূচক ব্যবহার করে। আমাদের পূর্ববর্তী প্রশ্নের জন্য, আমরা আমাদের এসকিউএল ক্যোয়ারী সরাসরি রকসেট এপিআই-তে লিখেছি। যদিও এটি কিছু অত্যন্ত কাস্টমাইজযোগ্য ব্যবহারকারী ইন্টারফেস থেকে করা সঠিক জিনিস, তবে SQL কোড আরও স্থিতিশীল হলে একটি ভাল বিকল্প রয়েছে। আমরা আমাদের অ্যাপ্লিকেশন যুক্তির মাঝখানে আমাদের অগোছালো SQL কোড বজায় রাখা এড়াতে চাই। এটিতে সহায়তা করার জন্য রকসেটের একটি বৈশিষ্ট্য রয়েছে যার নাম Query Lambdas। ক্যোয়ারী ল্যাম্বডাসের নাম, সংস্করণ, প্যারামিটারাইজড প্রশ্নগুলি রকসেট কনসোলে নিবন্ধিত। আপনি রকসেটে একটি ক্যোয়ারী ল্যাম্বডা কনফিগার করার পরে, আপনি ক্যোয়ারী ল্যাম্বডার জন্য একটি সম্পূর্ণরূপে পরিচালিত, মাপযোগ্য এন্ডপয়েন্ট পাবেন যা আপনি রকসেট দ্বারা কার্যকর করার জন্য আপনার পরামিতিগুলির সাথে কল করতে পারেন। এছাড়াও, আপনি প্রতিটি ক্যোয়ারী ল্যাম্বডার জন্য পর্যবেক্ষণ পরিসংখ্যানও পাবেন, যাতে আপনি পরিবর্তন করার সাথে সাথে আপনার ক্যোয়ারী ল্যাম্বডা কীভাবে কাজ করছে তা ট্র্যাক করতে পারেন। আপনি পারেন, কিন্তু আমাদের একত্রিত প্রশ্ন পরিচালনা করতে আমাদের প্রথম কোয়েরি ল্যাম্বদা সেট আপ করা যাক। । এখানে কোয়েরি ল্যাম্বদাস সম্পর্কে আরও জানতে অ্যাপ্লিকেশন সংগ্রহস্থলে একটি সম্পূর্ণ ওয়াকথ্রু পাওয়া যাবে রকসেট কনসোলের নেভিগেট করুন। সম্পাদকে নিম্নলিখিত ক্যোয়ারী পেস্ট করুন: ক্যোয়ারী এডিটর বিভাগে SELECT category, EXTRACT( month FROM transactionTime ) as month, EXTRACT( year FROM transactionTime ) as year, TRUNCATE(sum(amount), 2) AS amount FROM Transactions WHERE organization = :organization AND transactionTime > CURRENT_TIMESTAMP() - INTERVAL 3 MONTH GROUP BY category, month, year ORDER BY category, month, year DESC এই প্রশ্নটি প্রদত্ত সংস্থার জন্য গত তিন মাসের লেনদেনগুলিকে প্রদত্ত বিভাগ এবং লেনদেনের মাসের উপর ভিত্তি করে বাকেটগুলিতে গোষ্ঠীবদ্ধ করবে৷ তারপর, এটি প্রতি মাসে ব্যয় করা মোট পরিমাণ খুঁজে পেতে মাসের ভিত্তিতে একটি বিভাগের মানগুলি যোগ করবে৷ লক্ষ্য করুন যে এটি "অর্গানাইজেশন" অ্যাট্রিবিউটের জন্য একটি প্যারামিটার অন্তর্ভুক্ত করে, যেমনটি ক্যোয়ারীতে ":অর্গানাইজেশন" সিনট্যাক্স দ্বারা নির্দেশিত। এটি নির্দেশ করে যে কোয়েরি চালানোর জন্য একটি প্রতিষ্ঠানের মান অবশ্যই পাস করতে হবে। রকসেট কনসোলে ক্যোয়ারী ল্যাম্বডা হিসাবে ক্যোয়ারী সংরক্ষণ করুন। তারপর, দেখুন। এটি ক্যোয়ারী ল্যাম্বডাকে নাম দিয়ে ডাকে এবং ব্যবহারকারীর দেওয়া "সংস্থা" সম্পত্তি পাস করে। আমাদের TransactionService ক্লাসে fetchTransactionsByCategoryAndMonth কোডটি এটি আমাদের অ্যাপ্লিকেশনে পরিচালনা করার জন্য অনেক সহজ কোড। আরও, রকসেট প্রতিটি কোয়েরি ল্যাম্বডার জন্য সংস্করণ নিয়ন্ত্রণ এবং ক্যোয়ারী-নির্দিষ্ট পর্যবেক্ষণ প্রদান করে। এটি সময়ের সাথে সাথে আপনার প্রশ্নগুলি বজায় রাখা সহজ করে তোলে এবং কোয়েরি সিনট্যাক্সের পরিবর্তনগুলি কার্যক্ষমতাকে কীভাবে প্রভাবিত করে তা বুঝতে পারে৷ উপসংহার এই পোস্টে, আমরা দেখেছি কীভাবে আমাদের ব্যবহারকারীদের জন্য দ্রুত, আনন্দদায়ক অ্যাপ্লিকেশন অভিজ্ঞতা তৈরি করতে DynamoDB এবং Rockset একসাথে ব্যবহার করতে হয়। এটি করার মাধ্যমে, আমরা আমাদের অ্যাপ্লিকেশন বাস্তবায়নের ধারণাগত ভিত্তি এবং ব্যবহারিক পদক্ষেপ উভয়ই শিখেছি। প্রথমত, আমরা আমাদের অ্যাপ্লিকেশনের মূল কার্যকারিতা পরিচালনা করতে DynamoDB ব্যবহার করেছি। এর মধ্যে একটি নির্দিষ্ট গ্রাহকের জন্য একটি লেনদেন ফিড পুনরুদ্ধার করা বা একটি পৃথক লেনদেন দেখার মতো অ্যাক্সেস প্যাটার্ন অন্তর্ভুক্ত রয়েছে। DynamoDB-এর প্রাথমিক-কী-ভিত্তিক বিভাজন কৌশলের কারণে, এটি যেকোনো স্কেলে সামঞ্জস্যপূর্ণ কর্মক্ষমতা প্রদান করতে সক্ষম। কিন্তু DynamoDB এর ডিজাইনও এর নমনীয়তা সীমিত করে। এটি প্রচুর পরিমাণে রেকর্ড জুড়ে নির্বিচারে ক্ষেত্র বা একত্রিতকরণের নির্বাচনী প্রশ্নগুলি পরিচালনা করতে পারে না। এই নিদর্শনগুলি পরিচালনা করতে, আমরা রকসেট ব্যবহার করেছি। রকেট ডেটা-ভারী অ্যাপ্লিকেশনগুলিকে পাওয়ার জন্য একটি সম্পূর্ণরূপে পরিচালিত সেকেন্ডারি সূচক সরবরাহ করে। আমরা দেখেছি যে কীভাবে রকসেট আপনার প্রাথমিক ডেটা স্টোর থেকে একটি অবিচ্ছিন্ন ইনজেশন পাইপলাইন বজায় রাখে যা একটি কনভার্জড ইনডেক্সে আপনার ডেটা সূচী করে, যা ইনভার্টেড, কলামার এবং সারি ইন্ডেক্সিংকে একত্রিত করে। আমরা যখন আমাদের নিদর্শনগুলির মধ্য দিয়ে হেঁটেছি, আমরা দেখেছি যে কীভাবে রকসেটের প্রতিটি ইন্ডেক্সিং কৌশলগুলি আনন্দদায়ক ব্যবহারকারীর অভিজ্ঞতাগুলি পরিচালনা করতে একসাথে কাজ করে। অবশেষে, আমরা আমাদের ডায়নামোডিবি টেবিলের সাথে রকসেটকে সংযুক্ত করার এবং আমাদের অ্যাপ্লিকেশনে রকসেটের সাথে যোগাযোগ করার জন্য ব্যবহারিক পদক্ষেপগুলি অতিক্রম করেছি। এছাড়াও উপস্থিত হয়. এখানে