Что такое шардирование в ClickHouse
Что проверяют
Различаете ли вы шардирование и репликацию и понимаете ли, что в ClickHouse это не галочка, а решение об устройстве кластера. Вопрос быстро уходит в цену распределённого запроса, поэтому проверяют не определение, а понимание того, что ломается после разрезания данных.
Как отвечать
Шардирование это горизонтальное разрезание данных: каждый шард хранит свою часть, запрос выполняется на шардах параллельно, и это даёт рост и по объёму, и по скорости сканирования. Репликация это копии одних и тех же данных, и отвечает она за отказоустойчивость. Путать их нельзя: шардирование само по себе надёжность снижает, потеря шарда означает потерю его части данных.
Автоматики здесь нет. Состав кластера описывается в конфигурации, на узлах лежат локальные таблицы семейства MergeTree, а поверх них создаётся таблица движка Distributed, которая знает кластер и выражение ключа шардирования. Вставлять можно через неё или напрямую в шарды силами приложения. Второе чаще предпочтительнее: вставка через распределённую таблицу асинхронна, и её очередь приходится отслеживать.
Ключ шардирования выбирают по двум критериям, равномерность и колокация. Хэш от идентификатора клиента кладёт все строки одной сущности на один шард, и тогда группировка по ней считается локально, без пересылки.
Про чтение скажите отдельно. Агрегация уезжает на шарды и сводится на инициаторе, а вот соединения опасны: если правая таблица не колоцирована, её приходится рассылать на все узлы.
Где спотыкаются
Называют шардирование средством надёжности. Устойчивость даёт репликация, а распределённый запрос при недоступном шарде вернёт ошибку или молча неполные данные, если разрешено пропускать недоступные узлы.
Берут ключом шардирования дату или случайное значение. Первое собирает всю свежую запись на одном узле, второе рассыпает сущность по кластеру и делает любое соединение по ней распределённым.
Считают, что шарды можно переразложить на ходу. Смена ключа или добавление узла это ручная перекладка данных, поэтому запас по числу шардов закладывают заранее.