ক্যাশিং কি?
বল্টু ভাই আয়েশ করে বসে চা খাচ্ছিলেন, এমন সময় ঝড়ের বেগে ঘরে ঢুকল মন্টু। তার চেহারা দেখে মনে হচ্ছে যেন এইমাত্র ভূত দেখে এসেছে।
— "ভাই! শেষ! আমার বিড়ালটিউব শেষ!" মন্টু হাঁপাতে হাঁপাতে বললো।
বল্টু ভাই নির্বিকার ভঙ্গিতে চায়ের কাপে চুমুক দিয়ে বললেন, "কী রে? সিডিএন (CDN) তো ঠিকঠাক লাগিয়েছিলি। ভিডিও তো এখন রকেটের গতিতে চলার কথা। আবার কী হলো?"
মন্টু মাথায় হাত দিয়ে ধপ করে চেয়ারে বসে পড়ল। "ভিডিও তো রকেটের গতিতেই চলছে ভাই। কিন্তু নতুন এক ভুতুড়ে সমস্যা শুরু হয়েছে! ইউজাররা ভিডিও দেখছে ঠিকই, কিন্তু কমেন্ট করতে গেলে মাঝে মাঝে কমেন্ট পোস্ট হচ্ছে না। ভিডিওতে লাইক দিলে লাইক কাউন্ট বাড়ছে না। প্রোফাইল পেজ লোড হতে এত সময় নিচ্ছে যে মানুষজন গালিগালাজ শুরু করেছে।"
বল্টু ভাই মুচকি হাসলেন। "আমি তোকে আগের দিনই বলেছিলাম, ফ্রন্টএন্ড ফাস্ট করলি ঠিকই, কিন্তু ব্যাকএন্ডের ডাটাবেসে জ্যাম লাগলে আবার দৌড়ে আসতে হবে। এখন বল, ডাটাবেসের সিপিইউ (CPU) ইউজেস কত?"
মন্টু কাঁদো কাঁদো গলায় বলল, "ভাই, সিপিইউ তো ১০০% ছুঁই ছুঁই করছে! ডাটাবেস মনে হচ্ছে শ্বাস নিতে পারছে না। কিন্তু কেন এমন হচ্ছে? আমি তো ভালো সার্ভারই নিয়েছিলাম।"

বল্টু ভাই চায়ের কাপটা টেবিলে রেখে সোজা হয়ে বসলেন। "শোন মন্টু, তোর ডাটাবেস (যেমন PostgreSQL বা MySQL) ডাটা সেভ করে কোথায়? হার্ডডিস্কে, তাই না? হার্ডডিস্ক বা এসএসডি (SSD) জিনিসটা অনেক সেফ, কারেন্ট গেলেও ডাটা হারিয়ে যায় না। কিন্তু হার্ডডিস্ক থেকে ডাটা রিড (Read) বা রাইট (Write) করতে ফিজিক্যালি অনেক সময় লাগে।"
মন্টু মন দিয়ে শুনছে।
বল্টু ভাই বোঝানো শুরু করলেন, "ধর, তুই কোনো টপিক নিয়ে রিসার্চ করতে বিশাল এক লাইব্রেরিতে গেলি। অনেকক্ষণ খোঁজাখুঁজি করে একটা মোটা বই বের করে পড়া শুরু করলি। একটু পর তোর আবার ওই বইয়ের একটা লাইন দেখার দরকার পড়ল। তুই কি আবার হেঁটে সেই লাইব্রেরির কোণায় যাবি? নাকি বুদ্ধি করে বইটা নিজের পড়ার টেবিলেই এনে রাখবি?"
মন্টু মাথা নেড়ে বলল, "আরে না! যে বইগুলো আমি এখন পড়ছি, সেগুলো তো চোখের সামনে পড়ার টেবিলেই রাখব। বার বার লাইব্রেরির তাক হাতড়ে খোঁজার তো মানে হয় না।"
— "এক্সাক্টলি! তোর মেইন ডাটাবেস হলো ওই বিশাল লাইব্রেরি। আর তোর পড়ার টেবিল হলো মেমরি বা র্যাম (RAM)। ডাটাবেসের বিশাল হার্ডডিস্ক ঘেঁটে একই ডাটা বারবার খোঁজার কষ্ট না করে, আমরা যদি দরকারি ডাটাগুলো সার্ভারের র্যামে (RAM) এনে রাখি, তাহলে খোঁজার সময় প্রায় একদম জিরো হয়ে যাবে! ডাটাবেসের ওপর চাপও কমবে। আর এই 'পড়ার টেবিল' ম্যানেজ করার কাজটাই করে Redis বা Memcached-এর মতো সফটওয়্যারগুলো।"

মন্টু চোখ বড় বড় করে প্রশ্ন করে বসল, "আচ্ছা ভাই, তাহলে পুরো লাইব্রেরিটাই এনে পড়ার টেবিলে রাখলেই তো হয়! মানে সব ডাটাই মেমরিতে (RAM) রাখলে তো আর কোনো সমস্যাই থাকে না।"
বল্টু ভাই হেসে উঠলেন। "পুরো লাইব্রেরি রাখার মতো বিশাল টেবিল কেনার টাকা আছে তোর কাছে? র্যামের (RAM) দাম হার্ডডিস্ক বা SSD-এর চেয়ে কয়েকশ গুণ বেশি! এই কারণেই আমরা শুধু ওই ডাটাগুলোই মেমরিতে রাখব, যেগুলো ইউজাররা সবচেয়ে বেশি খুঁজছে বা যেগুলোর জন্য ডাটাবেসে সবচেয়ে বেশি চাপ পড়ছে।"
মন্টু মাথা চুলকে বলল, "তার মানে, ব্যাকএন্ড ক্যাশিং হচ্ছে আমার অ্যাপ আর ডাটাবেসের মাঝে থাকা একটা সুপার-ফাস্ট স্টোরেজ লেয়ার। যেখানে দরকারি ডাটাগুলো অল্প সময়ের জন্য সেভ করা থাকে, যাতে ডাটাবেস হাঁফ ছেড়ে বাঁচে।"
— "একদম তাই!" বল্টু ভাই বললেন। "আর মনে রাখিস, ক্যাশিং লেয়ার শুধু ডাটাবেস আর ব্যাকএন্ডের মাঝেই থাকে না। এটা ক্লায়েন্ট সাইড (ব্রাউজার) আর সার্ভারের মাঝে, অথবা একাধিক মাইক্রোসার্ভিসের মাঝেও থাকতে পারে। তুই যে সিডিএন (CDN) সেটআপ করেছিলি, সেটাও কিন্তু এক ধরনের ক্যাশিং (Edge Caching)। তবে আজকে তুই শুধু ডাটাবেসের ক্যাশিং নিয়েই ভাব।"
মন্টু একটু চিন্তিত মুখে বলল, “বুঝলাম ভাই। কিন্তু এই সিস্টেমে আরও একটা সার্ভিস (Redis) অ্যাড করলে কি ঝামেলা বাড়বে না? এটা দিয়ে আমার ওই ভুতুড়ে সমস্যা কি আদৌ ঠিক করা সম্ভব?”