Почему стоит использовать ClickHouse вместо Postgres?
Коротко: потому что ClickHouse разработан для быстрой аналитики, в частности для запросов GROUP BY, как OLAP-база данных, тогда как Postgres — это OLTP-база данных, предназначенная для транзакционных рабочих нагрузок.
OLTP, или базы данных для онлайн-обработки транзакций, предназначены для работы с транзакционными данными. Основная задача таких баз данных, классическим примером которых является Postgres, — гарантировать, что инженер может отправить в базу данных блок изменений и быть уверенным, что он — целиком — либо выполнится успешно, либо завершится ошибкой. Такие транзакционные гарантии со свойствами ACID — основной приоритет OLTP-баз данных и одно из главных преимуществ Postgres. При таких требованиях OLTP-базы данных обычно сталкиваются с ограничениями производительности, когда их используют для аналитических запросов по большим наборам данных.
OLAP, или системы онлайн-аналитической обработки, предназначены именно для таких задач — для работы с аналитическими нагрузками. Основная цель таких баз данных — дать инженерам возможность эффективно выполнять запросы и агрегировать огромные объёмы данных. OLAP-системы реального времени, такие как ClickHouse, позволяют проводить такой анализ по мере приёма данных в реальном времени.
Более подробное сравнение ClickHouse и PostgreSQL см. здесь.
Чтобы увидеть возможную разницу в производительности ClickHouse и Postgres при аналитических запросах, см. Rewriting PostgreSQL Queries in ClickHouse.
Стратегии миграции
При миграции из PostgreSQL в ClickHouse выбор подходящей стратегии зависит от вашего сценария использования, инфраструктуры и требований к данным. В целом CDC (фиксация изменений данных) в реальном времени — оптимальный подход для большинства современных сценариев, тогда как ручная пакетная загрузка с последующими периодическими обновлениями подходит для более простых сценариев или разовых миграций.
Ниже описаны две основные стратегии миграции: CDC в реальном времени и Ручная пакетная загрузка + периодические обновления.
Репликация в реальном времени (CDC)
CDC (фиксация изменений данных) — это процесс, который поддерживает синхронизацию таблиц между двумя базами данных. Для большинства миграций из PostgreSQL это самый эффективный подход, хотя и более сложный, поскольку он обрабатывает вставки, обновления и удаления из PostgreSQL в ClickHouse почти в реальном времени. Он особенно подходит для сценариев, где важна Real-time аналитика.
Репликацию в реальном времени с помощью CDC в ClickHouse можно реализовать через ClickPipes, если вы используете ClickHouse Cloud, или через PeerDB, если вы развертываете ClickHouse on-prem. Эти решения берут на себя всю сложность синхронизации данных в реальном времени, включая первоначальную загрузку, фиксируя вставки, обновления и удаления из PostgreSQL и реплицируя их в ClickHouse. Такой подход гарантирует, что данные в ClickHouse всегда остаются актуальными и точными без ручного вмешательства.
Ручная пакетная загрузка + периодические обновления
В некоторых случаях достаточно более простого подхода — ручной пакетной загрузки с последующими периодическими обновлениями. Эта стратегия идеально подходит для разовых миграций или ситуаций, где репликация в реальном времени не требуется. Она предполагает пакетную загрузку данных из PostgreSQL в ClickHouse — либо с помощью прямых SQL-команд INSERT, либо через экспорт и импорт CSV-файлов. После первоначальной миграции данные в ClickHouse можно периодически обновлять, синхронизируя изменения из PostgreSQL через равные промежутки времени.
Процесс пакетной загрузки прост и гибок, но у него есть недостаток: обновления в реальном времени отсутствуют. После того как исходные данные загружены в ClickHouse, последующие изменения не будут отражаться сразу, поэтому нужно настроить периодическую синхронизацию изменений из PostgreSQL. Такой подход хорошо подходит для сценариев, не критичных к задержкам, но при этом создает разрыв между моментом изменения данных в PostgreSQL и их появлением в ClickHouse.
Какую стратегию выбрать?
Для большинства приложений, которым нужны свежие, актуальные данные в ClickHouse, рекомендуемый подход — CDC (фиксация изменений данных) в реальном времени через ClickPipes. Он обеспечивает непрерывную синхронизацию данных при минимальных затратах на настройку и поддержку. В то же время ручная пакетная загрузка с периодическими обновлениями — вполне подходящий вариант для более простых разовых миграций или рабочих нагрузок, где обновления в реальном времени не критичны.