검색
검색
공개 노트 검색
회원가입로그인

Postgres에서 변경 데이터 캡처를 조정하기 위한 워터마크 사용

소개

포스트그레SQL(Postgres)은 변화 데이터 캡처(Change Data Capture, CDC)를 통해 데이터베이스의 변경 사항을 추적하는 데 강력한 도구입니다. Sequin과 같은 플랫폼을 통해 우리는 Postgres의 데이터를 Kafka, SQS, 웹훅 등 여러 목적지로 실시간 전송할 수 있습니다. 이번 글에서는 Postgres에서 워터마크를 사용하여 CDC를 조정하는 방법에 대해 알아보겠습니다.

변화 데이터 캡처의 중요성

데이터베이스에서 변화 데이터 캡처를 수행하는 것은 매우 중요합니다. 이는 데이터 일관성을 유지하고 실시간으로 변경 사항을 반영하는 데 필수적입니다. 특히, 여러 서비스나 시스템이 데이터를 공유하고 있는 환경에서는 데이터의 즉각적인 동기화가 필요합니다.

Sequin을 활용한 데이터 캡처

Sequin을 사용하면 Postgres의 데이터를 다양한 목적지로 실시간 전송할 수 있습니다. 이를 통해 우리는 데이터의 최신 상태를 유지하고 필요한 곳에 즉시 전달할 수 있습니다. Postgres는 WAL(Write-Ahead Logging)을 통해 데이터 변경 사항을 기록하지만, 이 로그를 영구적으로 보관하지 않기 때문에 테이블 상태 캡처에는 한계가 있습니다. 따라서 테이블에서 직접 데이터를 읽고 상태 캡처를 해야 합니다.

SlotProcessor와 TableReader의 조정 문제

SlotProcessor와 TableReader라는 두 가지 프로세스를 동시에 실행할 때 문제가 발생할 수 있습니다. 데이터 스트림 간의 일관성을 유지하려면 두 스트림이 적절하게 조정되어야 합니다. 이를 위해 다양한 솔루션이 제안됩니다.

솔루션 A: 직렬화

캡처 프로세스를 직렬화하여 순서 문제를 해결하는 방법입니다. 하지만 이 방법은 성능 저하를 초래할 수 있습니다.

솔루션 B: WAL 사용

테이블 캡처를 WAL을 통해 처리하여 순서를 보장하는 방법입니다. 이 방법은 성능 향상에 기여할 수 있습니다.

솔루션 C: 메모리 저장

테이블 캡처 프로세스를 메모리에 저장하고 SlotProcessor와 필터링하여 조정하는 방법입니다. 이 방법은 메모리 사용량이 증가할 수 있습니다.

솔루션 D: 청크 분할

테이블 캡처를 청크 단위로 분할하여 관리하는 방법입니다. 이 디자인은 Netflix의 DBLog에서 영감을 받았습니다.

워터마크를 활용한 동기화

워터마크는 낮은 워터마크와 높은 워터마크를 사용하여 데이터 스트림을 조정하는 방법입니다. Sequin은 Postgres의 pg_logical_emit_message를 사용하여 간편한 설정을 제공합니다. 이를 통해 데이터 스트림 간의 일관성을 유지하고 동기화를 간소화할 수 있습니다.

Elixir에서의 구현

Elixir에서의 구현 과정은 복잡할 수 있지만, 기본적으로 워터마크를 설정하고 이를 기반으로 데이터 스트림을 조정하는 원리입니다. 이를 통해 높은 성능을 유지하면서도 일관성을 확보할 수 있습니다.

이 접근 방식의 한계

이 접근 방식은 기본 키가 없는 테이블에서는 작동하지 않습니다. 현재 Sequin은 기본 키가 없는 테이블에 대해 테이블 캡처를 지원하지 않습니다.

결론

데이터 일관성을 유지하고 높은 성능을 제공하는 시스템을 구축하려면 워터마크를 사용한 동기화 방법이 효과적일 수 있습니다. Sequin Cloud에서 무료 체험 계정을 통해 직접 이 기능을 확인해보시기 바랍니다.

참고

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 43
heart
T
페이지 기반 대답
AI Chat