Postgres 대신 ClickHouse를 사용하는 이유
GROUP BY 쿼리에 최적화된 OLAP 데이터베이스인 반면, Postgres는 트랜잭션 워크로드를 처리하도록 설계된 OLTP 데이터베이스이기 때문입니다.
OLTP, 즉 온라인 트랜잭션 처리 데이터베이스는 트랜잭션 데이터를 관리하도록 설계되었습니다. Postgres가 대표적인 예시인 이러한 데이터베이스의 주된 목적은 엔지니어가 데이터베이스에 여러 업데이트를 하나의 작업 단위로 제출했을 때, 그 전체가 모두 성공하거나 모두 실패하도록 보장하는 것입니다. ACID 속성을 갖춘 이러한 트랜잭션 보장은 OLTP 데이터베이스의 핵심 특성이며, Postgres의 큰 강점이기도 합니다. 하지만 이러한 요구 사항 때문에 OLTP 데이터베이스는 대규모 데이터셋에 대한 분석 쿼리에 사용할 경우 일반적으로 성능 한계에 부딪힙니다.
OLAP, 즉 온라인 분석 처리 데이터베이스는 이러한 요구를 충족하기 위해, 다시 말해 분석 워크로드를 처리하기 위해 설계되었습니다. 이러한 데이터베이스의 주된 목적은 엔지니어가 방대한 데이터셋에 대해 효율적으로 쿼리하고 집계할 수 있도록 하는 것입니다. ClickHouse와 같은 실시간 OLAP 시스템은 데이터가 실시간으로 수집되는 동안 이러한 분석을 수행할 수 있게 해줍니다.
ClickHouse와 PostgreSQL의 차이점을 더 자세히 비교한 내용은 여기를 참조하십시오.
분석 쿼리에서 ClickHouse와 Postgres 간에 발생할 수 있는 성능 차이를 확인하려면 Rewriting PostgreSQL Queries in ClickHouse를 참조하십시오.
마이그레이션 전략
실시간 복제(CDC)
수동 대량 적재 + 주기적 업데이트
INSERT 명령을 사용하거나 CSV 파일을 내보내고 가져오는 방법으로 PostgreSQL의 데이터를 ClickHouse로 대량 적재합니다. 초기 마이그레이션이 끝난 후에는 일정한 간격으로 PostgreSQL의 변경 사항을 동기화하여 ClickHouse의 데이터를 주기적으로 업데이트할 수 있습니다.
대량 적재 과정은 단순하고 유연하지만, 실시간 업데이트가 없다는 단점이 있습니다. 초기 데이터가 ClickHouse에 들어간 이후에는 업데이트가 즉시 반영되지 않으므로, PostgreSQL의 변경 사항을 동기화하도록 주기적 업데이트를 예약해야 합니다. 이 방식은 시간 민감도가 낮은 사용 사례에 잘 맞지만, PostgreSQL에서 데이터가 변경되는 시점과 그 변경 사항이 ClickHouse에 반영되는 시점 사이에 지연이 발생합니다.
어떤 전략을 선택해야 할까요?
여기에서 PostgreSQL migration 가이드를 시작하세요.