Шардирование

Шардирование — стратегия горизонтального масштабирования данных, при которой части баз данных ClickHouse размещаются на разных хостах кластера. Шард (набор хостов) связывается с набором данных с помощью ключа шардирования. ClickHouse поддерживает шардирование для работы с большими объемами данных и для увеличения пропускной способности СУБД. Шардирование особенно полезно, когда вертикальное масштабирование (увеличение мощности сервера) нерентабельно или невозможно.

Преимущества шардирования

Шардирование предлагает распределить нагрузку по хостам базы данных — это позволяет преодолеть ограничения ресурсов одного сервера, что особенно актуально при больших объемах данных или необходимости в интенсивных вычислениях.

Горизонтальное масштабирование подразумевает распределение набора данных и нагрузки по нескольким хостам, сервера могут добавляться и для увеличения дисковой емкости. Емкость одной машины или ее скорость могут быть невысокими, но в горизонтально масштабируемом кластере каждая машина обрабатывает лишь часть общей нагрузки и хранит лишь часть общих данных. Это делает систему потенциально эффективнее, чем единственный сервер с большой емкостью и быстрыми дисками.

Недостаток шардирования — в сложности инфраструктуры, процедур развертывания и обслуживания.

Более подробно шардирование баз ClickHouse рассмотрено в описании движка Distributed.

Использование шардирования

Шардирование обычно используется в следующих случаях:

  • Ожидается высокая частота запросов к БД и быстрый рост количества данных.
  • Приложение требует все больше и больше ресурсов, но решение с кластером реплик не может быть расширено более емкими и быстрыми дисками, RAM для сервера, более мощными процессорами.

Шардирование может решить следующие проблемы:

Технические ограничения

Потребность работать с достаточно большими наборами данными может привести к тому, что инфраструктура хранения данных упирается в предел возможностей оборудования, доступного на рынке (например, IOPS дисковой подсистемы).

Когда приложениям приходится работать близко к лимитам производительности, имеет смысл разбить информацию на шарды и распределить операции чтения.

Географическое распределение потребителей

Распределение шардов кластера по различным регионам может помочь:

  • улучшить доступность для региональных пользователей;
  • удовлетворять местным законам, например, хранить данные на территории определенной страны или региона.

Недостаточная отказоустойчивость

Шардирование позволяет изолировать отказы отдельных хостов или наборов реплик. Без шардирования потеря отдельного хоста приводит к потере доступа ко всему набору данных, которые он содержит. А отказ, например, одного шарда из пяти оставляет доступными 80% данных таблицы.

Чтобы уменьшить риск отключения целого шарда, шарды рекомендуется настраивать как наборы трех хостов. Распределение хостов одного шарда по различным зонам доступности Облака позволяет увеличить доступность данных.

Недостаточная скорость

Скорость обработки запросов может снижаться из-за того, что они конкурируют за ресурсы, обычно при росте количества операций чтения или затрат процессорного времени на их обработку.

В шардированном кластере, где запросы к одной и той же таблице могут выполняться параллельно, устраняется конкуренция за общие ресурсы (процессор, дисковая подсистема), что позволяет сократить время обработки запроса.