내 잡다한 노트
PostgreSQL Citus 본문
Citus란?
Citus는 PostgreSQL을 수평 확장(Sharding) 가능하게 만들어주는 확장(extension) 입니다. 즉, PostgreSQL을 여러 개의 노드(서버)로 구성하여 하나의 분산 데이터베이스처럼 동작하도록 하는 확장 기능입니다.
Citus의 주요 특징
- 수평 확장(Sharding) 지원
- 데이터를 여러 개의 노드(서버)로 자동 분산하여 저장합니다.
- 데이터가 많아지더라도 성능을 유지하면서 확장할 수 있습니다.
- 병렬 쿼리 실행
- 여러 노드에서 동시에 쿼리를 실행하여 성능을 높일 수 있습니다.
- 대량의 데이터를 처리할 때 유용합니다.
- 고성능 OLAP(분석) 및 OLTP(트랜잭션) 지원
- 실시간 분석 및 대량 트랜잭션 처리에 적합합니다.
- PostgreSQL과 완벽한 호환
- 기존 PostgreSQL에서 사용하는 대부분의 기능을 그대로 사용할 수 있습니다.
- 기존 애플리케이션을 큰 수정 없이 Citus를 적용하여 확장할 수 있습니다.
- 멀티 테넌트(Multi-Tenant) 및 분산 테이블 지원
- 여러 테넌트(고객) 데이터를 효율적으로 분산 저장할 수 있습니다.
Citus 사용 사례
- 대량의 트랜잭션 데이터 처리 (e.g., IoT 데이터, 로그 데이터)
- SaaS(Software as a Service) 플랫폼의 멀티 테넌트 데이터베이스
- 실시간 분석 및 리포팅 시스템
- 대규모 이벤트 데이터 처리 (ex. 광고 클릭, 유저 활동 로그)
Citus를 설치하고 사용하는 방법
1. Citus 설치
Citus는 PostgreSQL의 확장이므로, PostgreSQL을 먼저 설치한 후 Citus를 추가할 수 있습니다.
# PostgreSQL 및 Citus 설치 (Ubuntu) sudo apt-get install postgresql-15 postgresql-15-citus
2. Citus 활성화
Citus를 활성화하려면 PostgreSQL에서 확장을 추가해야 합니다.
-- Citus 확장 추가 CREATE EXTENSION citus;
3. 데이터 샤딩 설정
Citus에서는 테이블을 샤드(Shard)로 나누어 저장할 수 있습니다.
-- 테이블 생성
CREATE TABLE orders ( id SERIAL PRIMARY KEY, customer_id INT, amount NUMERIC );
-- 테이블을 샤드 가능하도록 설정
SELECT create_distributed_table('orders', 'customer_id');
여기서 'customer_id'는 샤딩 키(Shard Key)입니다. 즉, customer_id를 기준으로 데이터를 분산 저장합니다.
Citus 배포 방식
Citus는 3가지 모드로 배포할 수 있습니다.
- 싱글 노드 모드: 단일 PostgreSQL 인스턴스에서 동작하며 로컬 샤딩을 제공합니다.
- 클러스터 모드: 여러 개의 노드(마스터 및 워커 노드)로 구성하여 분산 환경에서 실행됩니다.
- Managed Citus (Azure Cosmos DB for PostgreSQL): Azure에서 제공하는 관리형 Citus 서비스.
Citus와 일반 PostgreSQL 차이점
기능PostgreSQLCitus
데이터 확장 | 단일 서버 | 여러 노드(Sharding) |
대용량 데이터 처리 | 한정적 | 분산 처리 |
병렬 쿼리 | 일부 지원 | 전체 노드에서 실행 가능 |
멀티 테넌시 | 기본 지원 없음 | 네이티브 지원 |
사용 사례 | 소규모-중형 서비스 | 대규모 트랜잭션 및 분석 |
'DB > PostgreSQL' 카테고리의 다른 글
Pigsty 란? (0) | 2025.02.15 |
---|---|
pg_rewind 란? (0) | 2025.02.13 |
Patroni 설정 파일 (0) | 2025.02.13 |
Citus를 왜 사용해야하는가? (0) | 2025.02.12 |
PostgreSQL의 HA를 위해 설계된 Patroni (0) | 2025.02.12 |