Sharding בתמצית

Sharding מחלק מסד נתונים גדול לחלקים קטנים יותר הנקראים shards. במקום מסד נתונים אחד עצום, אתה מפיץ את הנתונים על פני מספר שרתים.

השיטה הזו עוזרת לך:

  • לנהל יותר נתונים
  • לעבד יותר בקשות
  • להפחית עומס על מכונות בודדות
  • לבצע Scaling אופקי

עליך להחליט כיצד לנתב נתונים ל-shard הנכון. להלן האסטרטגיות העיקריות:

  1. Range Based Sharding אתה מחלק את הנתונים על בסיס טווח של ערכים. דוגמה:
  • Shard 1: משתמשים 1 עד 3000
  • Shard 2: משתמשים 3001 עד 6000
  • Shard 3: משתמשים 6001 עד 10000
  1. Hash Based Sharding אתה משתמש בפונקציה מתמטית כדי לבחור shard. דוגמה: אתה משתמש באופרטור modulo על מזהה משתמש (user ID). אם התוצאה היא 0, הנתונים הולכים ל-Shard 1. אם התוצאה היא 1, הם הולכים ל-Shard 2. זה מפיץ את הנתונים באופן שווה.

  2. Directory Based Sharding אתה משתמש בטבלת חיפוש כדי למצוא את ה-shard הנכון. דוגמה: מערכת התראות מבצעת חיפוש של שם אפליקציה כמו "YouTube" בתוך ספרייה (directory). הספרייה אומרת למערכת להשתמש ב-"Shard 1". זה עובד כמו תיקייה במערכת קבצים.

  3. Geographical Sharding אתה שומר נתונים על בסיס מיקום. דוגמה:

  • משתמשים מהודו הולכים ל-shard של הודו.
  • משתמשים מארה"ב הולכים ל-shard של ארה"ב.
  • משתמשים מאירופה הולכים ל-shard של האיחוד האירופי.
  1. Dynamic Sharding אתה לא מבצע hardcode לטווחים או ל-hashes. האפליקציה שלך בודקת טבלת הגדרות בזמן ריצה (runtime). אתה יכול להוסיף shards חדשים מבלי לשנות את הקוד שלך.

  2. Hybrid Sharding אתה משלב שיטות כדי לקבל תוצאות טובות יותר. תבנית נפוצה היא Directory Based + Hash Based. ראשית, אתה משתמש ב-directory כדי למצוא קבוצה. לאחר מכן, אתה משתמש ב-hash כדי למצוא את ה-shard הספציפי בתוך אותה קבוצה. זה מעניק לך גם גמישות וגם איזון.

מקור: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b