⚠️ Почему ClickHouse не любит UPDATE

Одна из самых частых ошибок новичков — пытаться использовать ClickHouse как обычную транзакционную БД.

Например так:

• загрузили данные • потом начали часто обновлять строки • потом ещё и удалять по одной записи • потом удивились, почему всё стало работать тяжелее

Проблема в том, что ClickHouse изначально создавался не для такого сценария.

Он хорошо умеет:

• быстро писать большие пачки данных • быстро читать миллионы и миллиарды строк • быстро считать агрегаты • хорошо сжимать данные

То есть его сильная сторона — аналитика.

А вот частые UPDATE для него неудобны.

Почему? 🤔

Потому что ClickHouse лучше всего чувствует себя в модели:

добавили данные → сохранили → потом читаем и считаем

Это называется append-heavy подход.

То есть система любит, когда данные в основном добавляются, а не постоянно переписываются.

Когда ты делаешь UPDATE, для аналитического движка это почти всегда дорогая операция.

Почему она дорогая:

• нужно пересобрать куски данных • растёт фоновая нагрузка • усложняется хранение • увеличивается стоимость изменений • можно ухудшить скорость чтения и записи

Проще говоря:

для ClickHouse естественно читать и добавлять, а вот часто менять уже записанное — неестественно.

Именно поэтому ClickHouse плохо подходит для сценариев, где нужно:

• постоянно менять статусы • часто обновлять отдельные строки • делать много точечных DELETE • жить в логике “нашли запись → переписали запись”

Такие задачи обычно лучше решаются в OLTP-системах.

Например:

• PostgreSQL • MySQL • Oracle

А ClickHouse лучше ставить туда, где нужна аналитика:

• отчёты • дашборды • витрины • логи • события • большие исторические данные

Но тогда возникает вопрос 👇

А что делать, если данные всё-таки меняются?

Обычно архитектура строится так:

OLTP база → ETL / CDC → ClickHouse

То есть:

• в боевой системе данные живут и меняются • потом изменения передаются в аналитический слой • а в ClickHouse они уже складываются в удобном для аналитики виде

🧠 Архитектурная мысль

ClickHouse не надо ставить на место системы, которая живёт постоянными UPDATE.

Его место — аналитический слой.

Там, где нужно не “переписать одну строку”, а “быстро посчитать метрику по 800 млн записей”.

Вывод

ClickHouse не любит UPDATE не потому, что он “слабый”.

Наоборот.

Он очень сильный — просто в другой задаче.

Его суперсила:

• быстрое чтение • быстрые агрегации • большие объёмы данных • аналитическая нагрузка

Поэтому если у тебя система про постоянные изменения строк — это не лучший кандидат для ClickHouse.

А если у тебя система про аналитику на больших объёмах — тут ClickHouse чувствует себя отлично.

⚠️ Почему ClickHouse не любит UPDATE
Одна из самых частых ошибок новичков —
пытаться использовать ClickHouse как обычную транзакционную БД | Сетка — социальная сеть от hh.ru