মন্টু মিয়াঁর সিস্টেম ডিজাইন
ডাটাবেসের জ্যাম এবং ক্যাশিং

ক্যাশিং কীভাবে জান বাঁচাবে?

বল্টু ভাই হাসলেন। "শোন, কোনো সমস্যার সমাধান বের করতে হলে আগে সমস্যাটা বুঝতে হবে। তোর বিড়ালটিউবে যে ঝামেলা হচ্ছে তা মূলত ডাটাবেসের ওপর অতিরিক্ত রিড (Read) প্রেসার পড়ার কারণে।"

"তোর ইউজার এখন কয়েক লাখ। ভিডিও ফাস্ট করার জন্য তুই সিডিএন ব্যবহার করছিস, ভালো কথা। কিন্তু ভিডিওর মেটাডাটা (টাইটেল, ডেসক্রিপশন), লাইক সংখ্যা, আর হাজার হাজার কমেন্ট, এসব টেক্সট ডাটা তো ওই এক বেচারা ডাটাবেস থেকেই আসছে, তাই না?"

মন্টু মাথা নাড়ল, "হ্যাঁ, তা তো বটেই।"

— "ধর, কোনো একটা ভিডিও আপলোড হওয়ার সাথে সাথেই ভাইরাল হলো। প্রতি সেকেন্ডে হাজার হাজার মানুষ সেটা দেখছে। প্রত্যেকবার অ্যাপ ওপেন করলেই তোর সার্ভার ডাটাবেসকে বলছে, 'ভিডিওর টাইটেল দাও, লাইক কয়টা বলো, কমেন্টগুলো দেখাও'। ডাটাবেস যখন এই রিড রিকোয়েস্ট সামলাতেই হিমশিম খেয়ে যাচ্ছে, তখন কেউ নতুন করে লাইক বা কমেন্ট করলে (Write Request) ডাটাবেস সেটা নেওয়ার অবস্থায় থাকছে না। তখনই তোর ওই 'ভুতুড়ে সমস্যা' হচ্ছে, লাইক দিলে কাজ করছে না, কমেন্ট গায়েব হয়ে যাচ্ছে।"

"এখানে ক্যাশিং যেভাবে সাহায্য করে তা হলো, যে ডাটাগুলো মানুষ বারবার চাইছে (যেমন ভাইরাল ভিডিওর টাইটেল বা লাইক কাউন্ট), সেগুলো ডাটাবেস (হার্ডডিস্ক) থেকে তুলে এনে মেমরিতে (RAM) রেখে দেওয়া।"

এর ফলে:

  • ল্যাটেন্সি কমবে: মেমরি থেকে ডাটা আসবে চোখের পলকে।
  • স্কেলেবিলিটি বাড়বে: হুট করে ইউজার বাড়লেও ডাটাবেসের ওপর চাপ পড়বে না।
  • ইউজার এক্সপেরিয়েন্স: অ্যাপ মাখনের মতো চলবে, আর ওই ভুতুড়ে সমস্যাগুলোও পালাবে।

cache architecture

মন্টু নড়েচড়ে বসল, “তাহলে তো এটা অনেক কাজের জিনিস! একটু কষ্ট হলেও সার্ভার আর ডাটাবেসের মাঝে রেডিস (Redis) সেটআপ করে ফেলতে হবে। কিন্তু ভাই, এই ক্যাশের মধ্যে কোন ডাটা থাকবে আর কোনটা থাকবে না, সেটা কি আমি ম্যানুয়ালি সিলেক্ট করে দেব, নাকি অটোমেটিক হবে?”