digital-garden/_inbox/Шардирование в БД.md

4.9 KiB
Raw Blame History

aliases tags date zero-link parents linked
Шардинг
зрелость/🌱
2024-03-12
00 HighLoad
00 Базы Данных
Партиционирование в БД

Тезисы

  • Один из вариантов масштабирования.
  • Данные разбиваются на части. Части размещаются на разных серверах.
  • Не является репликацией и партиционированием.
  • Шардирование последняя мера по улучшению производительности.

Шардирование — это метод разделения и распределения больших объёмов данных по разным базам данных или узлам в рамках одной распределённой системы, чтобы облегчить их управление, обеспечить масштабируемость и повысить производительность. Каждая часть данных, или "шард", функционирует как отдельная база данных, и все шарды вместе образуют логически единую базу данных.

Основные принципы шардирования включают в себя:

  • Горизонтальное разделение данных: Вместо того чтобы хранить все данные в одной таблице или базе данных, они разделяются на меньшие части. Каждый шард содержит часть данных, например, пользователей с идентификаторами от 1 до 1000 в одном шарде и от 1001 до 2000 в другом.
  • Распределение нагрузки: Поскольку запросы к данным могут обрабатываться параллельно разными шардами, это способствует балансировке нагрузки и увеличению производительности системы.
  • Масштабируемость: По мере роста объёмов данных новые шарды могут быть добавлены в систему, что позволяет масштабировать приложение горизонтально.
  • Локализация данных: Шардирование может быть использовано для локализации данных, чтобы уменьшить задержки, связанные с географическим расположением пользователей и баз данных.

Плюсы:

  • Горизонтальное масштабирование
  • Улучшение производительности: Единственный метод ускоряющий запись в БД.
  • Высокая доступность и устойчивость к отказам: Отказ одного шарда не приводит к полному сбою системы. Данные в остальных шардах остаются доступными, что повышает общую устойчивость системы к отказам.

Минусы:

  • Сложность управления: Нет стандартных механизмов по управлению шардами. В случае добавления или удаления шардов может потребоваться перераспределение больших объемов данных, что может быть ресурсоемкой операцией и повлиять на производительность системы.
  • Трудности с транзакциями и согласованностью: Шардирование может затруднить обеспечение атомарности и согласованности транзакций, охватывающих несколько шардов, что может потребовать дополнительных усилий для поддержания целостности данных.

Проблемы

Стратегии разбиения на шарды

Заметки

  • Реализации шардирования могут мешать JOIN SQL