Раздел 38 · ClickHouse и аналитические базы

ClickHouse против PostgreSQL для аналитики

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Раздел начинался с жалобы: дашборд Отто тормозил приложение на PostgreSQL. Теперь у нас есть ClickHouse, и пора честно ответить на вопрос, который задаст любой тимлид: а точно нужна вторая база? Может, хватит PostgreSQL с индексами? Разберём, где проходит граница и как две базы живут вместе.

Пока данных мало

На учебной базе «Гонца» в 41 тысячу заказов оба запроса дашборда идут миллисекунды. PostgreSQL читает 4 МБ, это ничто. Если данных у тебя миллионы строк и они не растут быстро, отдельная аналитическая база скорее всего не нужна: PostgreSQL с правильными индексами, отдельной репликой для отчётов и материализованными представлениями справится.

Разница появляется на объёме. Строковая база читает строки целиком, колоночная только нужные колонки, сжатые, и обрабатывает их пачками на всех ядрах. На сотнях миллионов строк типичный аналитический запрос в ClickHouse быстрее в десятки и сотни раз. Это видно в открытом сравнении аналитических баз ClickBench: колоночные базы там на порядки опережают строковые.

Где выигрывает каждый

PostgreSQLClickHouse
Транзакции, ограничения, внешние ключида, полноценнонет
Правка и удаление отдельных строкдёшеводорого, переписывает части
Поиск одной строки по ключубыстро, B-деревосносно, но читает гранулу
JOIN нескольких больших таблицхорошоосторожно: правая таблица идёт в память
Сводные запросы по сотням миллионов строкминутысекунды
Поток в сотни тысяч строк в секундутяжелообычная нагрузка
Хранение на дискебез сжатия колонокв разы меньше

Вывод из таблицы не «одна база лучше», а «у баз разная работа». Касса и бухгалтерия, как в первом уроке.

Как они живут вместе

Типичная схема:

  1. Приложение работает с PostgreSQL. Заказы, курьеры, клиенты, всё с транзакциями.
  2. Изменения из PostgreSQL копируются в ClickHouse. Либо пачками раз в несколько минут, либо потоком через CDC: специальный сервис читает журнал изменений PostgreSQL и пересылает их в ClickHouse.
  3. События приложения идут в ClickHouse напрямую, через Kafka, мимо PostgreSQL.
  4. Дашборды и аналитики работают с ClickHouse и не трогают рабочую базу.

Для разовых задач ClickHouse умеет читать PostgreSQL напрямую табличной функцией postgresql('host:5432', 'db', 'orders', 'user', 'password'). Удобно, чтобы перелить справочник.

урок из курса

Урок из курса «ClickHouse и аналитические базы». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.