CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
country TEXT
) PARTITION BY LIST (country);
CREATE TABLE users_usa PARTITION OF users FOR VALUES IN ('USA');
CREATE TABLE users_eu PARTITION OF users FOR VALUES IN ('EU');
2. PostgreSQL FDW 사용 (FDW를 사용하면 PostgreSQL이 원격 데이터베이스와 상호 작용하여 파편 관리에 유용)
CREATE EXTENSION postgres_fdw;
CREATE SERVER shard1 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.xxx.1.1', dbname 'shard1_db');
CREATE SERVER shard2 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.xxx.1.2', dbname 'shard2_db');
3. Citus (Sharding을 자동화하는 Open-Source PostgreSQL 확장자)
SELECT create_distributed_table('users', 'id');
샤드의 장점
✅ 확장성 - DB를 분배하여 대형 데이터 세트를 처리
✅ 고 가용성 - 샤드가 실패해도 다른 샤드들은 계속 작동.
✅ 더 빠른 쿼리 - 쿼리는 파편에서 병렬로 처리.
샤드의 도전
❌ 복잡성 - 신중한 계획 및 유지 보수가 필요.
❌ 크로스 샤드 조인 - 여러 샤드와 관련된 쿼리는 느릴 수 있다.
❌ 재조정 - 파편 사이에서 데이터를 이동하는 것은 어려울 수 있다.
샤드를 사용할 때?
단일 서버에 비해 데이터베이스가 너무 큰 경우.
트래픽이 높아 쿼리 성능이 어려움을 겪을 때.
수직 하드웨어 업그레이드를 넘어 수평 스케일링이 필요할 때.
| DB - partition 수평/수직 분할 (0) | 2024.05.22 |
|---|---|
| Undo, Redo segment (0) | 2024.04.14 |
| MVCC (1) | 2024.04.11 |
| postgresql - vacuum (1) | 2024.04.11 |
| Window 함수 (1) | 2024.04.09 |