شاردینگ به زبان ساده
شاردینگ یک پایگاه داده بزرگ را به قطعات کوچکتری به نام shard تقسیم میکند. به جای داشتن یک پایگاه داده عظیم، دادهها را بین چندین سرور توزیع میکنید.
این روش به شما کمک میکند تا:
- دادههای بیشتری را مدیریت کنید
- درخواستهای بیشتری را پردازش کنید
- بار روی تکتک ماشینها را کاهش دهید
- مقیاسپذیری افقی (Scale horizontally) داشته باشید
شما باید تصمیم بگیرید که چگونه دادهها را به شارد صحیح هدایت کنید. در اینجا استراتژیهای اصلی آورده شده است:
- شاردینگ مبتنی بر محدوده (Range Based Sharding) شما دادهها را بر اساس محدودهای از مقادیر تقسیم میکنید. مثال:
- شارد ۱: کاربران ۱ تا ۳۰۰۰
- شارد ۲: کاربران ۳۰۰۱ تا ۶۰۰۰
- شارد ۳: کاربران ۶۰۰۱ تا ۱۰۰۰۰
شاردینگ مبتنی بر هش (Hash Based Sharding) شما از یک تابع ریاضی برای انتخاب شارد استفاده میکنید. مثال: شما از عملگر باقیمانده (modulo) روی شناسه کاربر (user ID) استفاده میکنید. اگر نتیجه ۰ باشد، دادهها به شارد ۱ میروند. اگر نتیجه ۱ باشد، به شارد ۲ میروند. این کار باعث توزیع یکنواخت دادهها میشود.
شاردینگ مبتنی بر دایرکتوری (Directory Based Sharding) شما از یک جدول جستجو (lookup table) برای یافتن شارد صحیح استفاده میکنید. مثال: یک سیستم اعلان، نام اپلیکیشنی مانند "YouTube" را در یک دایرکتوری جستجو میکند. دایرکتوری به سیستم میگوید که از "Shard 1" استفاده کند. این روش مانند پوشههای یک سیستم فایل عمل میکند.
شاردینگ جغرافیایی (Geographical Sharding) شما دادهها را بر اساس موقعیت مکانی ذخیره میکنید. مثال:
- کاربران هند به شارد هند میروند.
- کاربران آمریکا به شارد آمریکا میروند.
- کاربران اروپا به شارد اروپا (EU) میروند.
شاردینگ پویا (Dynamic Sharding) شما محدودهها یا هشها را به صورت ثابت (hardcode) تعریف نمیکنید. اپلیکیشن شما در زمان اجرا (runtime) یک جدول پیکربندی را بررسی میکند. شما میتوانید بدون تغییر در کد، شاردهای جدید اضافه کنید.
شاردینگ ترکیبی (Hybrid Sharding) شما روشها را برای رسیدن به نتایج بهتر با هم ترکیب میکنید. یک الگوی رایج، ترکیب روش "مبتنی بر دایرکتوری" و "مبتنی بر هش" است. ابتدا از یک دایرکتوری برای یافتن یک گروه استفاده میکنید. سپس از یک هش برای یافتن شارد خاص در آن گروه استفاده میکنید. این کار هم انعطافپذیری و هم تعادل را برای شما فراهم میکند.
منبع: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b