Таблица Clickhouse, MergeTree Engine, постоянно заполняется запросами «INSERT INTO… FORMAT CSV», начиная с пустого. Средняя скорость ввода 7000 строк в секунду. Вставка выполняется партиями по несколько тысяч строк. Это сильно влияет на производительность, когда запросы SELECT выполняются одновременно. Как описано в документации Clickhouse, системе требуется не более 10 минут для объединения данных определенной таблицы (повторного индексации). Но этого не происходит, поскольку таблица постоянно заполняется.
Это также очевидно в файловой системе. Папка таблицы содержит тысячи подпапок, а индекс чрезмерно сегментирован. Если прием данных прекращается, через несколько минут таблица полностью объединяется, а количество подпапок становится дюжиной.
Чтобы устранить указанную выше слабость, был использован механизм буферизации для буферизации приема данных таблицы в течение 10 минут. Следовательно, максимальное количество строк в буфере в среднем составляет 4200000.
Исходная таблица отстает не более чем на 10 минут, поскольку буфер хранит самые последние принятые строки. Наконец, таблица объединяется, и поведение такое же, как и в случае, когда таблица перестала заполняться на несколько минут. Но таблица Buffer, которая соответствует комбинации буфера и исходной таблицы, становится значительно медленнее.
Из вышесказанного следует, что, если таблица постоянно заполняется, она не объединяется, и индексирование страдает. Есть ли способ избежать этой слабости?