Раздел начинался с жалобы: дашборд Отто тормозил приложение на PostgreSQL. Теперь у нас есть ClickHouse, и пора честно ответить на вопрос, который задаст любой тимлид: а точно нужна вторая база? Может, хватит PostgreSQL с индексами? Разберём, где проходит граница и как две базы живут вместе.
Пока данных мало
На учебной базе «Гонца» в 41 тысячу заказов оба запроса дашборда идут миллисекунды. PostgreSQL читает 4 МБ, это ничто. Если данных у тебя миллионы строк и они не растут быстро, отдельная аналитическая база скорее всего не нужна: PostgreSQL с правильными индексами, отдельной репликой для отчётов и материализованными представлениями справится.
Разница появляется на объёме. Строковая база читает строки целиком, колоночная только нужные колонки, сжатые, и обрабатывает их пачками на всех ядрах. На сотнях миллионов строк типичный аналитический запрос в ClickHouse быстрее в десятки и сотни раз. Это видно в открытом сравнении аналитических баз ClickBench: колоночные базы там на порядки опережают строковые.
Где выигрывает каждый
| PostgreSQL | ClickHouse | |
|---|---|---|
| Транзакции, ограничения, внешние ключи | да, полноценно | нет |
| Правка и удаление отдельных строк | дёшево | дорого, переписывает части |
| Поиск одной строки по ключу | быстро, B-дерево | сносно, но читает гранулу |
JOIN нескольких больших таблиц | хорошо | осторожно: правая таблица идёт в память |
| Сводные запросы по сотням миллионов строк | минуты | секунды |
| Поток в сотни тысяч строк в секунду | тяжело | обычная нагрузка |
| Хранение на диске | без сжатия колонок | в разы меньше |
Вывод из таблицы не «одна база лучше», а «у баз разная работа». Касса и бухгалтерия, как в первом уроке.
Как они живут вместе
Типичная схема:
- Приложение работает с PostgreSQL. Заказы, курьеры, клиенты, всё с транзакциями.
- Изменения из PostgreSQL копируются в ClickHouse. Либо пачками раз в несколько минут, либо потоком через CDC: специальный сервис читает журнал изменений PostgreSQL и пересылает их в ClickHouse.
- События приложения идут в ClickHouse напрямую, через Kafka, мимо PostgreSQL.
- Дашборды и аналитики работают с ClickHouse и не трогают рабочую базу.
Для разовых задач ClickHouse умеет читать PostgreSQL напрямую табличной функцией postgresql('host:5432', 'db', 'orders', 'user', 'password'). Удобно, чтобы перелить справочник.
урок из курса
Урок из курса «ClickHouse и аналитические базы». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.