- এটি এপ্রিল, 2021 এ প্রকাশিত ব্লগ পোস্টের ধারাবাহিকতা।
আমরা একটি নমুনা অ্যাপ্লিকেশন তৈরি করেছি যা একটি সাধারণ ওয়েব ব্যবহারের ক্ষেত্রে এবং সার্ভারহীন ফাংশন ব্যবহার করে অগ্রণী সার্ভারহীন ডাটাবেসের কর্মক্ষমতা তুলনা করে। ডাটাবেসগুলি হল DynamoDB, MongoDB (Atlas), Firestore, Cassandra (Datastax Astra), FaunaDB এবং Redis (Upstash)
অ্যাপ্লিকেশন এবং সোর্স কোড চেক করুন।
আমরা যা তুলনা করেছি তা হল প্রতিটি ডাটাবেসের জন্য শীর্ষ 10টি সংবাদ নিবন্ধ আনার বিলম্বিতা। সমগ্র তথ্য নিউ ইয়র্ক টাইমস API থেকে সংগৃহীত 7001টি বাস্তব সংবাদ নিবন্ধ। আমরা কার লেটেন্সি পরিমাপ করি তা হল:
select * from news where section = “World” order by view_count desc limit 10
ব্যাকএন্ডটি AWS Lambda (Firestore-এর জন্য Google ক্লাউড ফাংশন) সার্ভারহীন ফাংশন হিসেবে প্রয়োগ করা হয়েছে। আমরা লেটেন্সি কমানোর জন্য একই অঞ্চলে (যখন সম্ভব) সার্ভারহীন ফাংশন এবং ডেটাবেসগুলিকে সংযোজন করেছি৷
আমরা লেটেন্সি পরিমাপ থেকে ডাটাবেস সংযোগের সময় বাদ দিয়েছি এবং ক্যোয়ারির ঠিক আগে এবং পরে টাইমস্ট্যাম্প রেকর্ড করেছি। লেটেন্সি পরিমাপ করা হয় এবং ব্যাকএন্ডে রেকর্ড করা হয় (সার্ভারলেস ফাংশনের ভিতরে) তাই এটি ব্রাউজার এবং সার্ভারের মধ্যে নেটওয়ার্ক লেটেন্সি অন্তর্ভুক্ত করে না। এছাড়াও লেটেন্সি সার্ভারহীন ফাংশনের কোল্ড স্টার্ট টাইম দ্বারা প্রভাবিত হয় না।
গতিশীল বাস্তব বিশ্বের ডেটা অনুকরণ করতে, আমরা শীর্ষ 10টি নিবন্ধে র্যান্ডম ভিউ_কাউন্ট মান নির্ধারণ করেছি। তাই প্রতিবার আমরা ডাটাবেসকে তাদের ক্যাশে ব্যবহার করা থেকে বিরত রাখার জন্য নিবন্ধের একটি ভিন্ন সেট ফেরত দিতে বাধ্য করি। আপডেট ক্রিয়াকলাপগুলি বিলম্বের গণনার মধ্যে অন্তর্ভুক্ত নয়৷
৷এখানে আজ পর্যন্ত লেটেন্সি সংখ্যা (অগাস্ট, ২৫)
নীচে, আমি প্রতিটি ডাটাবেসের জন্য প্রযোজ্য কাস্টম কনফিগারেশনগুলির তালিকা করব:
DynamoDB
৷অঞ্চল:US-West-1
পড়ার এবং লেখার ক্ষমতা:50 (ডিফল্ট মান ছিল 5)।
সূচক:পার্টিশন কী বিভাগ (স্ট্রিং) এবং বাছাই কী ভিউ_কাউন্ট (সংখ্যা) সহ GSI
দ্রষ্টব্য:গ্লোবাল টেবিল সক্রিয় করা হয়নি কারণ ক্লায়েন্ট ইতিমধ্যে একই অঞ্চলে রয়েছে (US-West-1)
কোড চেক করুন।
MongoDB (এটলাস)
অঞ্চল:AWS N. ভার্জিনিয়া (us-east-1)
ক্লাস্টার স্তর:M5 (সাধারণ)
সূচক:বিভাগ এবং view_count
এর যৌগিক সূচকদ্রষ্টব্য:আমি আশা করি আমি MongoDB সার্ভারহীন অফারটি চেষ্টা করতে পারতাম তবে এটিতে Node.js ড্রাইভার নেই। কিন্তু এটি একটি সমস্যা হওয়া উচিত নয় কারণ আমি db সংযোগটি সেই অংশের বাইরে রাখি যা আমি লেটেন্সি গণনা করি৷
কোড চেক করুন।
ফায়ারস্টোর
অঞ্চল:GCP US-সেন্ট্রাল
মোড:ডেটাস্টোর
সূচী:বিভাগের উপর যৌগিক সূচি
কোড চেক করুন।
Cassandra (Datastax Astra)
অঞ্চল:AWS US-East-1
প্ল্যান:আপনি যেভাবে যান সেইভাবে অর্থ প্রদান করুন
সূচক:প্রাথমিক কী (বিভাগ, ভিউ_কাউন্ট, আইডি)
API:REST API
কোড চেক করুন।
FaunaDB
পরিকল্পনা:ব্যক্তিগত (প্রতি মাসে $25)
সূচক:term=section, value=view_count
API:FQL
কোড চেক করুন।
Redis (Upstash)
অঞ্চল:AWS US-West-1
প্ল্যান:যেতে যেতে পেমেন্ট করুন।
সূচী:SortedSet ব্যবহার করা হয়।
দ্রষ্টব্য:একক এবং মাল্টি জোন ডেটাবেস আলাদাভাবে পরীক্ষা করা হয়৷
কোড চেক করুন।
বিশেষ নোট
- FaunaDB-তে ডিফল্টরূপে আরও ভাল ধারাবাহিকতার গ্যারান্টি এবং বিশ্বব্যাপী প্রতিলিপি রয়েছে। এছাড়াও এটি আপনাকে কোন অঞ্চল স্থাপন করতে হবে তা চয়ন করার অনুমতি দেয় না। এটি তুলনামূলকভাবে কম কর্মক্ষমতার পিছনে কারণ হতে পারে।
- অন্যদের সাথে ফায়ারস্টোরের কার্যকারিতা একই রকম কিন্তু একটি বড় বৈচিত্র্য সহ। এটা হতে পারে কারণ ঠান্ডা সংযোগের একটি ওভারহেড আছে. আমি খুঁজে পাচ্ছি না কিভাবে সংযোগটি বাঁচিয়ে রাখা যায়। এই বিষয়ে আপনার কোন ধারণা থাকলে আমাকে জানান।
- ক্যাসান্ড্রা প্রাথমিক কী ক্ষেত্রগুলি আপডেট করার অনুমতি দেয় না। সেকেন্ডারি ইনডেক্স বাঞ্ছনীয় নয় যদি আপনি সূচক অনেক আপডেট করবেন। তাই আমি ভিউ_কাউন্ট আপডেট করতে পারিনি যা এর কার্যকারিতাকে ইতিবাচকভাবে প্রভাবিত করতে পারে।
- যদিও Upstash একক জোন কিছুটা দ্রুত দেখায়, Upstash-এর জন্য একক এবং মাল্টি জোন সেটআপের মধ্যে পারফরম্যান্সের বড় পার্থক্য নেই। REST API উচ্চ পার্সেন্টাইলে নেটিভ API-এর খুব কাছাকাছি পারফরম্যান্স দেখায়।
মনে রাখবেন যে এটি একটি ক্রমাগত প্রচেষ্টা তাই আমরা মানদণ্ডের গুণমান উন্নত করতে রিফ্যাক্টর কোড চালিয়ে যাব। যখন আমরা একটি পণ্যের কোড রিফ্যাক্টর করি তখন আমরা তার হিস্টোগ্রাম রিসেট করব। কোড চেক করুন এবং উন্নতি করার কিছু আছে কিনা তা আমাদের জানান। আপনি আমাদের সাথে টুইটার এবং বিরোধে যোগাযোগ করতে পারেন।