Шардинг коротко

Шардинг розділяє велику базу даних на менші частини, які називаються шардами. Замість однієї масивної бази даних ви розподіляєте дані між кількома серверами.

Цей метод допомагає вам:

  • Обробляти більше даних
  • Обробляти більше запитів
  • Зменшити навантаження на окремі машини
  • Масштабуватися горизонтально

Ви повинні вирішити, як спрямовувати дані до відповідного шарду. Ось основні стратегії:

  1. Шардинг на основі діапазонів (Range Based Sharding) Ви розділяєте дані на основі діапазону значень. Приклад:
  • Шард 1: Користувачі від 1 до 3000
  • Шард 2: Користувачі від 3001 до 6000
  • Шард 3: Користувачі від 6001 до 10000
  1. Шардинг на основі хешування (Hash Based Sharding) Ви використовуєте математичну функцію для вибору шарду. Приклад: Ви використовуєте оператор взяття залишку (modulo) від ID користувача. Якщо результат дорівнює 0, дані потрапляють у Шард 1. Якщо результат дорівнює 1, вони потрапляють у Шард 2. Це дозволяє рівномірно розподілити дані.

  2. Шардинг на основі каталогу (Directory Based Sharding) Ви використовуєте таблицю пошуку, щоб знайти потрібний шард. Приклад: Система сповіщень шукає назву додатка, наприклад "YouTube", у каталозі. Каталог вказує системі використовувати "Shard 1". Це працює подібно до папки у файловій системі.

  3. Географічний шардинг (Geographical Sharding) Ви зберігаєте дані залежно від місцезнаходження. Приклад:

  • Користувачі з Індії потрапляють у шард Індії.
  • Користувачі з США потрапляють у шард США.
  • Європейські користувачі потрапляють у шард ЄС.
  1. Динамічний шардинг (Dynamic Sharding) Ви не прописуєте діапазони або хеші жорстко в коді. Ваш додаток перевіряє таблицю конфігурації під час виконання. Ви можете додавати нові шарди, не змінюючи код.

  2. Гібридний шардинг (Hybrid Sharding) Ви поєднуєте методи для отримання кращих результатів. Поширеним патерном є поєднання Directory Based + Hash Based. Спочатку ви використовуєте каталог, щоб знайти групу, а потім використовуєте хеш, щоб знайти конкретний шард у цій групі. Це забезпечує і гнучкість, і баланс.

Джерело: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b