Sharding সংক্ষেপে

Sharding একটি বড় ডাটাবেসকে ছোট ছোট অংশে বিভক্ত করে যাকে 'shards' বলা হয়। একটি বিশাল ডাটাবেসের পরিবর্তে, আপনি ডেটা একাধিক সার্ভারে ছড়িয়ে দেন।

এই পদ্ধতিটি আপনাকে সাহায্য করে:

  • আরও বেশি ডেটা হ্যান্ডেল করতে
  • আরও বেশি রিকোয়েস্ট প্রসেস করতে
  • একক মেশিনের ওপর চাপ কমাতে
  • অনুভূমিকভাবে (horizontally) স্কেল করতে

আপনাকে ঠিক করতে হবে কীভাবে ডেটাকে সঠিক শার্ডে রাউট করতে হবে। এখানে প্রধান কৌশলগুলো দেওয়া হলো:

১. রেঞ্জ ভিত্তিক শার্ডিং (Range Based Sharding) আপনি মানের একটি রেঞ্জ বা সীমার ওপর ভিত্তি করে ডেটা বিভক্ত করেন। উদাহরণ:

  • শার্ড ১: ইউজার ১ থেকে ৩০০০
  • শার্ড ২: ইউজার ৩০০১ থেকে ৬০০০
  • শার্ড ৩: ইউজার ৬০০১ থেকে ১০০০০

২. হ্যাশ ভিত্তিক শার্ডিং (Hash Based Sharding) আপনি একটি শার্ড বেছে নিতে গাণিতিক ফাংশন ব্যবহার করেন। উদাহরণ: আপনি একটি ইউজার আইডি-র ওপর modulo অপারেটর ব্যবহার করেন। যদি ফলাফল ০ হয়, তবে ডেটা শার্ড ১-এ যাবে। যদি ফলাফল ১ হয়, তবে এটি শার্ড ২-এ যাবে। এটি ডেটাকে সমানভাবে ছড়িয়ে দেয়।

৩. ডিরেক্টরি ভিত্তিক শার্ডিং (Directory Based Sharding) সঠিক শার্ডটি খুঁজে পেতে আপনি একটি লুকআপ টেবিল (lookup table) ব্যবহার করেন। উদাহরণ: একটি নোটিফিকেশন সিস্টেম ডিরেক্টরিতে "YouTube"-এর মতো একটি অ্যাপের নাম খোঁজে। ডিরেক্টরি সিস্টেমটিকে "Shard 1" ব্যবহার করতে বলে। এটি একটি ফাইল সিস্টেম ফোল্ডারের মতো কাজ করে।

৪. ভৌগোলিক শার্ডিং (Geographical Sharding) আপনি অবস্থানের ওপর ভিত্তি করে ডেটা সংরক্ষণ করেন। উদাহরণ:

  • ভারতের ইউজাররা ইন্ডিয়া শার্ডে যাবে।
  • আমেরিকার ইউজাররা ইউএসএ শার্ডে যাবে।
  • ইউরোপীয় ইউজাররা ইইউ (EU) শার্ডে যাবে।

৫. ডায়নামিক শার্ডিং (Dynamic Sharding) আপনি রেঞ্জ বা হ্যাশ হার্ডকোড করেন না। আপনার অ্যাপ্লিকেশন রানটাইমে একটি কনফিগারেশন টেবিল চেক করে। আপনি আপনার কোড পরিবর্তন না করেই নতুন শার্ড যোগ করতে পারেন।

৬. হাইব্রিড শার্ডিং (Hybrid Sharding) আপনি আরও ভালো ফলাফল পেতে বিভিন্ন পদ্ধতি একত্রিত করেন। একটি সাধারণ প্যাটার্ন হলো ডিরেক্টরি ভিত্তিক + হ্যাশ ভিত্তিক। প্রথমে, আপনি একটি গ্রুপ খুঁজে পেতে ডিরেক্টরি ব্যবহার করেন। তারপর, সেই গ্রুপের মধ্যে নির্দিষ্ট শার্ডটি খুঁজে পেতে একটি হ্যাশ ব্যবহার করেন। এটি আপনাকে নমনীয়তা এবং ভারসাম্য উভয়ই প্রদান করে।

উৎস: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b