Повернутися до всіх запитань

Що таке Sharding у базах даних?

Devs Hive

Devs Hive

Зустрічали на інтервʼю: 1 користувач

Sharding — це спосіб розділити велику базу даних на декілька менших частин (shards), які зберігаються на різних серверах.

Основна ідея полягає в тому, щоб розподілити дані та навантаження між декількома серверами, замість того щоб зберігати все на одному.

Яку проблему він вирішує?

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

Ми можемо купити потужніший сервер, але рано чи пізно досягнемо межі його можливостей.

Замість того щоб зберігати всіх користувачів на одному сервері, ми можемо розподілити їх між декількома:

  1. Shard 1 — користувачі з user_id від 1 до 1 000 000.
  2. Shard 2 — користувачі з user_id від 1 000 001 до 2 000 000.
  3. Shard 3 — користувачі з user_id від 2 000 001 до 3 000 000.

Тепер, коли потрібно отримати інформацію про користувача з user_id = 1500000, система визначає, що він знаходиться на другому сервері, та звертається безпосередньо до нього.

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

Як визначити, на якому сервері зберігати дані?

Для цього використовується Shard Key — поле, за яким система визначає, до якого шарду належить запис.

Існує декілька популярних підходів:

  1. Range-based Sharding — розподіл за діапазонами значень, наприклад user_id від 1 до 1 000 000.
  2. Hash-based Sharding — розподіл на основі хешу певного поля, наприклад user_id.
  3. Geographic Sharding — розподіл за географічним розташуванням, наприклад користувачі з Європи та США на різних серверах.

Чим Sharding відрізняється від Partitioning?

Обидва підходи передбачають розділення даних на менші частини.

Але є важлива відмінність:

  1. Partitioning — розділяє одну таблицю на частини в межах одного сервера бази даних.
  2. Sharding — розподіляє дані між декількома незалежними серверами баз даних.

Чи є недоліки у Sharding?

Так. Хоча Sharding дозволяє масштабувати систему, він значно ускладнює її архітектуру.

Наприклад:

  1. Потрібно визначати, на якому шарді знаходяться потрібні дані.
  2. Запити, які потребують інформації з декількох шардів, стають складнішими.
  3. Транзакції між різними шардами складніше реалізувати.
  4. Нерівномірний розподіл даних може призвести до перевантаження окремих серверів.

Зустрічав на інтервʼю?

Повʼязані питання

Коментарі (0)

Увійдіть, щоб залишити коментар

Поки що немає коментарів. Будьте першим!