Sharding باختصار
تقوم عملية الـ Sharding بتقسيم قاعدة بيانات كبيرة إلى قطع أصغر تسمى shards. بدلاً من وجود قاعدة بيانات واحدة ضخمة، تقوم بتوزيع البيانات عبر خوادم متعددة.
تساعدك هذه الطريقة على:
- التعامل مع كمية أكبر من البيانات
- معالجة المزيد من الطلبات
- تقليل الحمل على الأجهزة الفردية
- التوسع الأفقي (Scale horizontally)
يجب عليك تحديد كيفية توجيه البيانات إلى الـ shard الصحيح. إليك الاستراتيجيات الرئيسية:
- التجزئة القائمة على النطاق (Range Based Sharding) تقوم بتقسيم البيانات بناءً على نطاق من القيم. مثال:
- Shard 1: المستخدمون من 1 إلى 3000
- Shard 2: المستخدمون من 3001 إلى 6000
- Shard 3: المستخدمون من 6001 إلى 10000
التجزئة القائمة على الهاش (Hash Based Sharding) تستخدم دالة رياضية لاختيار الـ shard. مثال: تستخدم عامل باقي القسمة (modulo operator) على معرف المستخدم (user ID). إذا كانت النتيجة 0، تذهب البيانات إلى Shard 1. وإذا كانت النتيجة 1، تذهب إلى Shard 2. هذا يوزع البيانات بشكل متساوٍ.
التجزئة القائمة على الدليل (Directory Based Sharding) تستخدم جدول بحث للعثور على الـ shard الصحيح. مثال: يقوم نظام إشعارات بالبحث عن اسم تطبيق مثل "YouTube" في دليل ما. يخبر الدليل النظام باستخدام "Shard 1". يعمل هذا تماماً مثل مجلدات نظام الملفات.
التجزئة الجغرافية (Geographical Sharding) تقوم بتخزين البيانات بناءً على الموقع. مثال:
- مستخدمو الهند يذهبون إلى shard الهند.
- مستخدمو الولايات المتحدة يذهبون إلى shard الولايات المتحدة.
- المستخدمون الأوروبيون يذهبون إلى shard الاتحاد الأوروبي.
التجزئة الديناميكية (Dynamic Sharding) لا تقوم بتحديد النطاقات أو الهاشات بشكل ثابت (hardcode). يتحقق تطبيقك من جدول الإعدادات أثناء وقت التشغيل (runtime). يمكنك إضافة shards جديدة دون تغيير الكود الخاص بك.
التجزئة الهجينة (Hybrid Sharding) تقوم بدمج الطرق للحصول على نتائج أفضل. النمط الشائع هو الجمع بين التجزئة القائمة على الدليل والتجزئة القائمة على الهاش (Directory Based + Hash Based). أولاً، تستخدم دليلاً للعثور على مجموعة. ثم، تستخدم الهاش للعثور على الـ shard المحدد داخل تلك المجموعة. يمنحك هذا المرونة والتوازن معاً.
المصدر: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b