Шардирование таблиц ClickHouse

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

Данные стоит распределять по шардам, если есть:

  • Таблицы значительного объема: задуматься стоит при объеме таблицы от 200 ГБ.
  • Таблицы с неоднородным содержанием: например, данные можно четко разделить на часто и редко запрашиваемые.
  • Таблицы с высокими требованиями к скорости чтения и записи данных: шардирование поможет распределить нагрузку по хостам, чтобы обойти технические ограничения.

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

Подробнее о концепции шардирования читайте в разделе Шардирование.

Как начать шардирование таблиц

По умолчанию Managed Service for ClickHouse создает первый шард вместе с кластером. Этот шард включает все хосты кластера. Чтобы начать использовать шардирование, добавьте нужное количество шардов и создайте таблицу на базе движка Distributed. В статье по ссылке описаны стратегии шардирования и инструкции по созданию таблиц нужного вида, а также ограничения распределенных таблиц.

Managed Service for ClickHouse автоматически создает конфигурацию шардов в кластере. Вы можете управлять этой конфигурацией.

Пример шардирования

Допустим, у вас уже есть кластер Managed Service for ClickHouse с шардами и базой данных default. Необходимо включить шардирование для таблицы hits. Для примера в качестве выражения шардирования используется случайное число rand():

  1. Подключитесь к базе.

  2. Создайте распределенную таблицу:

    CREATE TABLE sharding ENGINE = Distributed(logs, default, hits, rand());
    

После этого вы можете отправлять SELECT-запросы и INSERT-запросы к созданной таблице, и они будут обрабатываться согласно установленной конфигурации.