내 잡다한 노트

PostgreSQL Citus 본문

DB/PostgreSQL

PostgreSQL Citus

peanutwalnut 2025. 2. 12. 13:43

Citus란?

Citus는 PostgreSQL을 수평 확장(Sharding) 가능하게 만들어주는 확장(extension) 입니다. 즉, PostgreSQL을 여러 개의 노드(서버)로 구성하여 하나의 분산 데이터베이스처럼 동작하도록 하는 확장 기능입니다.

Citus의 주요 특징

  1. 수평 확장(Sharding) 지원
    • 데이터를 여러 개의 노드(서버)로 자동 분산하여 저장합니다.
    • 데이터가 많아지더라도 성능을 유지하면서 확장할 수 있습니다.
  2. 병렬 쿼리 실행
    • 여러 노드에서 동시에 쿼리를 실행하여 성능을 높일 수 있습니다.
    • 대량의 데이터를 처리할 때 유용합니다.
  3. 고성능 OLAP(분석) 및 OLTP(트랜잭션) 지원
    • 실시간 분석 및 대량 트랜잭션 처리에 적합합니다.
  4. PostgreSQL과 완벽한 호환
    • 기존 PostgreSQL에서 사용하는 대부분의 기능을 그대로 사용할 수 있습니다.
    • 기존 애플리케이션을 큰 수정 없이 Citus를 적용하여 확장할 수 있습니다.
  5. 멀티 테넌트(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가지 모드로 배포할 수 있습니다.

  1. 싱글 노드 모드: 단일 PostgreSQL 인스턴스에서 동작하며 로컬 샤딩을 제공합니다.
  2. 클러스터 모드: 여러 개의 노드(마스터 및 워커 노드)로 구성하여 분산 환경에서 실행됩니다.
  3. 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