Выбор ответа Junior ClickHouse и колоночные СУБД спрашивают часто обновлено

Вставки по одной строке

Вопрос

Сервис пишет в ClickHouse каждое событие отдельным INSERT, 3000 вставок в секунду. Через некоторое время вставки начинают падать с ошибкой о слишком большом числе частей. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Каждая вставка создаёт часть, слияния не успевают за потоком; нужны пачки или asyncinsert. MergeTree рассчитан на крупные редкие вставки.

Варианты ответа

  1. ClickHouse не принимает больше 1000 строк в секунду на таблицу, остальное нужно шардировать
  2. Нужно увеличить index_granularity, чтобы каждая вставка помещалась в одну гранулу части
  3. Каждая вставка создаёт часть, слияния не успевают за потоком; нужны пачки или async_insertправильный ответ
  4. Таблице не хватает первичного ключа, без него каждая вставка пишется в отдельную партицию

Разбор

MergeTree рассчитан на крупные редкие вставки. Тысячи частей в секунду переполняют очередь слияний, и сервер защищается отказом. Буфер на стороне приложения, async_insert или чтение из Kafka через движок Kafka решают проблему. Миллионы строк в секунду ClickHouse принимает, если пачками. Гранулярность индекса на число частей не влияет. Первичный ключ тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.