- Postgresql의 샤드
- Sharding은 성능, 확장성 및 가용성을 향상시키기 위해 여러 서버 (또는 노드)에 데이터를 배포하는 데이터베이스 파티셔닝 기술
- 모든 데이터를 단일 데이터베이스 인스턴스에 저장하는 대신 Sharding은 이를 더 작고 관리하기 쉬운 청크로 나s눈다.
- 샤드의 주요 구성 요소
- 샤드 key
- 샤드 (예 : 사용자 ID, 지역 등)에 데이터를 배포하는 데 사용되는 열 (또는 열 세트).
- 코디네이터 (라우터)
- 샤드 키를 기반으로 쿼리를 올바른 샤드로 구동. (수동 / pgbouncer / citus 와 같은 관리 툴)
- 샤드 노드
- 각 노드 (데이터베이스 서버)는 데이터의 일부를 저장
- 노드는 쿼리를 처리하기 위해 독립적으로 작동
- 샤드 key
- 샤드 전략
- 해시 기반 샤딩
- 샤드 키 값은 해시되어 샤드 위치를 결정
- 데이터 배포를 보장하지만 범위 쿼리는 비효율적
- ex) SELECT * FROM users WHERE id % 4 = 2;
- 레인지 기반 샤딩
- 데이터는 값 범위에 따라 나눈다 (예 : 사용자 ID 1-1000은 Shard 1, 1001-2000에서 Shard 2로 이동).
- 범위 쿼리에는 적합 but 샤드당 고르지 않은 분포도로 구성될 수 있음
- 목록 기반 샤딩
- 특정 값 또는 카테고리는 다른 파편에 할당 (예 : Shard 1의 "USA", Shard 2의 "EU").
- 해시 기반 샤딩
- Postgresql에서 샤딩 구현
- 테이블 파티셔닝 사용 (수동 샤딩)
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 > Postgresql' 카테고리의 다른 글
DB - partition 수평/수직 분할 (0) | 2024.05.22 |
---|---|
Undo, Redo segment (0) | 2024.04.14 |
MVCC (1) | 2024.04.11 |
postgresql - vacuum (0) | 2024.04.11 |
Window 함수 (0) | 2024.04.09 |