ডাটার কাটাকুটি খেলা
ডাটা পার্টিশনিং ও শার্ডিং
ব্যাকএন্ডে ক্যাশিং লেয়ার (Redis) সেটআপ করার পর বিড়ালটিউব আবার নতুনের মতো দৌড়াতে শুরু করল। ভুতুড়ে ল্যাগ উধাও, ইউজাররাও মহাখুশি। এভাবেই কেটে গেল বেশ কয়েক মাস। ইন্টারনেটে বিড়ালের ভিডিওর ডিমান্ড এমনিতেই আকাশচুম্বী, তার উপর বিড়ালটিউবের স্পিড দেখে ইউজার হু হু করে বাড়তে লাগল।
কিন্তু মন্টুর কপালে কি আর বেশিদিন সুখ সয়? ইউজার যত বাড়ে, পুরনো সেই ভুতুড়ে জ্যাম আবার উঁকি দিতে থাকে। তবে এবার সমস্যাটা একটু অন্যরকম। মন্টু মনিটরিং ড্যাশবোর্ডে খেয়াল করল, ডাটা রিড (Read) করতে কোনো সমস্যাই হচ্ছে না, ক্যাশিং লেয়ার সব সামলে নিচ্ছে। কিন্তু যখনই কোনো ইউজার নতুন ভিডিও আপলোড দিচ্ছে, কিংবা কোনো কিউট বিড়ালের ভিডিওতে "ম্যাঁও ম্যাঁও!" লিখে কমেন্ট করছে বা লাইক দিচ্ছে (Write Operation), তখনই সার্ভারের দম বন্ধ হয়ে আসছে।
কারণটা খুব সিম্পল। রেডিস দিয়ে মন্টু ডাটা 'পড়া' ফাস্ট করেছে ঠিকই, কিন্তু ডাটা 'লেখা' বা পার্মানেন্টলি সেভ করার জন্য তো সেই একটাই বেচারা ডাটাবেস! কোটি কোটি লাইক, কমেন্ট আর ভিডিওর মেটাডাটার চাপে ডাটাবেসের টেবিলগুলো এতই বিশাল হয়ে গেছে যে, সেখানে নতুন একটা লাইন লিখতে গেলেই রীতিমতো ট্রাফিক জ্যাম লেগে যাচ্ছে।

এই জ্যাম সে ছাড়াবে কীভাবে? "নাহ, নিজেকে আর পণ্ডিত না ভেবে বল্টু ভাইয়ের কাছেই যাই।" যেই ভাবা সেই কাজ। এক ছুটে মন্টু চলে গেল বল্টু ভাইয়ের ডেরায়।
মন্টুকে হাঁপাতে দেখে বল্টু ভাই মুচকি হেসে বললেন, "কী রে? বিড়ালটিউবের রাইট অপারেশনে জ্যাম লেগেছে, তাই তো? আমি বেশ কিছুদিন ধরেই তোর সিস্টেমে একটু ল্যাগ পাচ্ছিলাম, তখনই বুঝে গেছি বেচারা ডাটাবেসটার ওপর দিয়ে কী ঝড়টাই না যাচ্ছে! আয়, চেয়ার টেনে বস। আজ তোকে শেখাবো কীভাবে ডাটাবেসের টেবিলগুলোকে অপারেশন থিয়েটারে নিয়ে কাটাছেঁড়া করতে হয়।"
ডাটার কাটাছেঁড়া
বল্টু ভাইয়ের অপারেশন থিয়েটার
মন্টুকে বোঝানো শুরু করলেন বল্টু ভাই, "শোন, এর আগে সিডিএন (CDN) আর ক্যাশিং ব্যবহার করে তুই ডাটাবেসের ওপর থেকে ডাটা পড়ার (Read) চাপ প্রায় জিরোতে নামিয়ে এনেছিস। যেহেতু তোর সিস্টেম রিড-হেভি ছিল, তাই এতদিন সব মাখন এর মত চলছিল। কিন্তু 'রাইট' অপারেশনগুলো তো সব ওই একটা ডাটাবেস ইন্সট্যান্সেই গিয়ে হিট করছে। তোর ওই এক ডাটাবেসের সাইজ এখন হাতির মতো হয়ে গেছে, সে নড়াচড়া করবে কীভাবে? বেচারা এখন ওভারলোডেড।"
— "তাহলে ভাই, এই হাতিকে বাঁচানোর উপায়?" মন্টুর চোখেমুখে হতাশা।
— "আরে উপায় অবশ্যই আছে! ইঞ্জিনিয়ারিংয়ে সমস্যা থাকলে সমাধানও থাকে। এই সমস্যা সমাধানের জন্য তোর বিশাল ডাটাবেসটাকে কেটে কয়েকটা ছোট ছোট ভাগে ভাগ করে আলাদা আলাদা সার্ভারে রাখতে হবে। এতে করে ডাটা ম্যানেজ করা সহজ হবে, আর কোনো একটা সার্ভারের ওপর একাই দুনিয়ার সব চাপ পড়বে না। ডাটাবেসকে এই ছোট ছোট লজিক্যাল ভাগে ভাগ করার প্রসেসকেই বলা হয় ডাটা পার্টিশনিং (Data Partitioning)। আর যখন এই ভাগগুলোকে আলাদা ফিজিক্যাল সার্ভারে রাখা হয়, তখন ওই প্রত্যেকটা টুকরোকে আদর করে ডাকা হয় শার্ড (Shard)।"

মন্টুর চোখ চকচক করে উঠল, "বাহ, দারুণ বুদ্ধি তো! একটা বড় হাতি পালার চেয়ে কয়েকটা ছোট ঘোড়া পালা অনেক সহজ। কিন্তু ভাই, এই ভাগাভাগিটা করব কীভাবে? আর আমার ব্যাকএন্ড বুঝবেই বা কীভাবে যে কোন ইউজারের ডাটা কোন সার্ভারে (বা শার্ডে) আছে?"
বল্টু ভাই মন্টুর পিঠে থাপ্পড় দিয়ে বললেন, "আরে এত অস্থির হচ্ছিস কেন? সব বলছি, আস্তে ধীরে। মনোযোগ দিয়ে শোন, ডাটা কাটাকুটিরও আবার অনেকগুলো স্টাইল আছে।"