-
샤드란? 데이터베이스 수평 확장의 핵심 개념!성장과정(dev)/DB(mysql) 2024. 12. 21. 20:57
1. 샤드란?
- 큰 데이터베이스를 다수의 독립적인 작은 데이터베이스(샤드)로 나누어 저장하는 방식
- 각 샤드는 전체 데이터의 일부를 담당하며, 샤드 간에는 데이터가 중복되지 않음.
- MongoDB, Cassandra, Elasticsearch 등과 같은 데이터베이스는 샤딩을 기본적으로 지원함.
"왜 사용하나요?"
- 수평적 확장성(Horizontal Scaling): 데이터베이스 용량이나 성능을 높이기 위해 여러 노드를 추가하여 분산 처리.
- 단일 서버의 처리 용량에는 한계가 있기 때문에, 수직적 확장(Vertical Scaling)(서버 업그레이드) 대신 수평적 확장이 선호됨.
"샤딩을 적용하면 어떤 효과를 누리나요?"
- 읽기/쓰기 부하 분산.
- 저장 용량 분산.
- 단일 장애점(Single Point of Failure) 방지.
2. 샤딩(Sharding)의 핵심 개념
- 데이터를 특정 기준(사용자 ID, 지역, 시간 등)에 따라 여러 샤드로 분리.
- 각 샤드는 별도의 서버(또는 노드)에 저장되며, 독립적으로 읽기/쓰기 작업을 처리.
- 샤드 간 데이터 중복이 없으므로 스토리지와 부하를 분산할 수 있음.
3. 구현 방법 3가지 (무엇을 기반으로 샤딩?)
- 범위 기반 샤딩(Range-Based Sharding):
- 데이터를 특정 범위로 나누어 샤드에 할당.
- 예: 사용자 ID가 1~1000인 데이터는 샤드 A에, 1001~2000은 샤드 B에.
- 장점: 구현이 간단.
- 단점: 특정 범위에 데이터가 집중되면 부하 분산이 비효율적.
- 해시 기반 샤딩(Hash-Based Sharding):
- 데이터를 특정 해싱 함수를 사용해 샤드에 분배.
- 예: hash(userID) % shardCount로 샤드 번호를 결정.
- 장점: 데이터가 균등하게 분산됨.
- 단점: 샤드 추가/삭제 시 데이터 재분배가 필요.
- 지리적 샤딩(Geo-Based Sharding):
- 데이터를 지역이나 국가 등 지리적 기준에 따라 분리.
- 예: 한국 사용자 데이터는 샤드 A, 미국 사용자는 샤드 B.
4. 샤딩의 장단점
장점
- 확장성: 데이터를 샤드로 나누어 부하를 분산하므로, 성능과 저장 용량이 대폭 향상
- 가용성: 특정 샤드에 문제가 생겨도 다른 샤드가 계속 작동.
- 비용 절감: 고성능 단일 서버 대신 여러 저비용 서버를 사용할 수 있음.
단점
- 복잡성 증가: 데이터 분배, 샤드 간 쿼리 처리, 트랜잭션 관리 등이 복잡.
- 데이터 재분배 문제: 샤드 수가 변경될 때 데이터의 이동이 필요.
- 샤드 간 조인 어려움: 여러 샤드에 걸친 데이터를 조회하려면 애플리케이션 레벨에서 조인이 필요.
5. 샤딩 사용 사례
- 대규모 애플리케이션에서:
- Twitter: 사용자 데이터를 ID 기반으로 샤딩. MySQL을 기본 데이터 저장소로 사용하면서, 이를 확장하기 위해 샤딩, 캐싱, 분산 시스템 기술을 결합했습니다.
- YouTube: 동영상 메타데이터를 해시 기반으로 샤딩.
- 전자상거래: 제품 데이터나 사용자 데이터를 여러 샤드로 분산.
6. 데이터베이스를 나누는 방법 샤드 vs 파티셔닝 비교
- 샤드: 데이터를 분산하여 여러 독립적인 데이터베이스에 저장.
- 파티셔닝: 단일 데이터베이스 내에서 데이터를 논리적으로 분리.
'성장과정(dev) > DB(mysql)' 카테고리의 다른 글
DB 시스템에서의 동시성 제어 방법 (1) 2024.12.20 mysql) BIGINT 와 BIGINT UN 의 차이점 (0) 2023.04.14 [mssql 테이블정보 확인] oracle / DESC '테이블명' ---> mssql / ? (0) 2020.10.06 mssql sum에 연산값들이 모두 null값일 때 (0) 2020.09.29