--- aliases: - Шардинг tags: - зрелость/🌱 date: - - 2024-03-12 zero-link: - "[[00 HighLoad]]" - "[[00 Базы Данных]]" parents: linked: - "[[Партиционирование в БД]]" --- ## Тезисы - Один из вариантов масштабирования - Данные разбиваются на части. Части размещаются на разных серверах. - Не является [репликацией](_inbox/Репликация.md) и [партиционированием](Партиционирование%20в%20БД.md) *** Шардирование — это метод разделения и распределения больших объёмов данных по разным базам данных или узлам в рамках одной распределённой системы, чтобы облегчить их управление, обеспечить масштабируемость и повысить производительность. Каждая часть данных, или "шард", функционирует как отдельная база данных, и все шарды вместе образуют логически единую базу данных. Основные принципы шардирования включают в себя: - **Горизонтальное разделение данных**: Вместо того чтобы хранить все данные в одной таблице или базе данных, они разделяются на меньшие части. Каждый шард содержит часть данных, например, пользователей с идентификаторами от 1 до 1000 в одном шарде и от 1001 до 2000 в другом. - **Распределение нагрузки**: Поскольку запросы к данным могут обрабатываться параллельно разными шардами, это способствует балансировке нагрузки и увеличению производительности системы. - **Масштабируемость**: По мере роста объёмов данных новые шарды могут быть добавлены в систему, что позволяет масштабировать приложение горизонтально. - **Локализация данных**: Шардирование может быть использовано для локализации данных, чтобы уменьшить задержки, связанные с географическим расположением пользователей и баз данных. **Плюсы:** - [Горизонтальное масштабирование](Горизонтальное%20масштабирование.md) - **Улучшение производительности**: Единственный метод ускоряющий запись в БД. - **Высокая доступность и устойчивость к отказам**: Отказ одного шарда не приводит к полному сбою системы. Данные в остальных шардах остаются доступными, что повышает общую устойчивость системы к отказам. **Минусы:** - **Сложность управления**: Управление множеством шардов и обеспечение их синхронизации может быть сложной задачей, требующей продвинутых решений для мониторинга, резервного копирования и восстановления. - **Сложность проектирования**: Приложениям, использующим шардированные базы данных, часто требуется более сложная архитектура и дизайн базы данных, а также изменения в логике приложения для эффективного распределения и доступа к данным. - **Трудности с транзакциями и согласованностью**: Шардирование может затруднить обеспечение атомарности и согласованности транзакций, охватывающих несколько шардов, что может потребовать дополнительных усилий для поддержания целостности данных. - **Перераспределение данных**: В случае добавления или удаления шардов может потребоваться перераспределение больших объемов данных, что может быть ресурсоемкой операцией и повлиять на производительность системы. **Проблемы** - [Согласованное префиксное чтение](Согласованное%20префиксное%20чтение.md) ## Заметки - Реализации шардирования могут мешать [JOIN SQL](JOIN%20SQL.md)