내 잡다한 노트
Shard 란? 본문
Shard는 데이터베이스나 분산 시스템에서 데이터를 수평적으로 분할하여 저장하는 방법입니다. 데이터를 여러 **샤드(Shard)**라는 단위로 나누어 저장하고 처리함으로써, **확장성(Scalability)**과 **성능(Performance)**을 개선하고 데이터 용량을 효율적으로 관리할 수 있습니다.
1. Shard의 핵심 개념
- 데이터 분할:
- 데이터셋을 작은 조각(Shard)으로 나누어 여러 서버에 분산 저장.
- 각 샤드는 전체 데이터의 부분 집합(subset)을 포함.
- 독립적 관리:
- 각 샤드는 독립적인 데이터베이스나 스토리지 단위로 작동하며, 샤드 간에는 데이터가 중복되지 않음.
- 확장성:
- 데이터가 증가하면 새로운 샤드를 추가하여 시스템 용량을 확장 가능.
2. Shard의 장점
- 수평적 확장성 (Horizontal Scalability):
- 데이터를 여러 샤드로 나눔으로써, 더 많은 서버를 추가하여 처리량을 높이고 스토리지 용량을 확장할 수 있음.
- 성능 향상:
- 각 샤드가 별도의 서버에서 동작하므로, 데이터 접근 및 처리 속도가 빨라짐.
- 특정 샤드에 대한 쿼리는 해당 샤드에서만 수행되므로 처리 효율이 높아짐.
- 데이터 분리:
- 데이터를 분리하여 저장하므로, 특정 데이터에 대한 트래픽이 다른 샤드에 영향을 미치지 않음.
- 예: 사용자 ID별로 데이터를 분리하여, 특정 사용자 활동이 다른 사용자에게 영향을 주지 않음.
- 관리 용이성:
- 샤드 간 독립성으로 인해, 장애 발생 시 특정 샤드만 복구하거나 유지보수 가능.
3. Shard의 단점
- 복잡한 관리:
- 데이터 분할 및 샤드 배치 전략을 설계하고 유지보수해야 하므로, 운영 복잡도가 증가.
- 불균형 문제:
- 샤드에 데이터가 균등하게 분배되지 않으면 특정 샤드에 부하가 집중될 수 있음(Hotspot 문제).
- 글로벌 쿼리 복잡성:
- 샤드 전체를 대상으로 쿼리를 실행해야 하는 경우 성능이 저하될 수 있음.
- 데이터 이동 비용:
- 샤드 크기를 재조정하거나 새 샤드를 추가할 때 데이터 이동 비용이 발생.
4. Shard 구성 전략
데이터를 어떻게 나눌지(Shard Key 선택)에 따라 샤드의 효율성이 결정됩니다. 대표적인 구성 방식은 다음과 같습니다.
4.1 Range Sharding
- 기준: 특정 범위(range)에 따라 데이터를 나눔.
- 예시:
- 사용자 ID가 1
1000은 Shard A, 10012000은 Shard B.
- 사용자 ID가 1
- 장점:
- 간단하고 설계가 쉬움.
- 단점:
- 특정 범위의 데이터가 집중될 경우 불균형 발생 가능(Hotspot 문제).
4.2 Hash Sharding
- 기준: 데이터의 특정 키 값(예: 사용자 ID)을 해시(Hash) 함수로 변환하여 샤드에 분배.
- 예시:
- Hash(user_id) % 4로 샤드 4개에 분배.
- 장점:
- 데이터를 균등하게 분배하여 불균형 문제를 줄임.
- 단점:
- 샤드 수를 변경할 경우(예: 샤드 추가) 전체 데이터를 재분배해야 함.
4.3 Geographic Sharding
- 기준: 데이터의 지역(Region)에 따라 분리.
- 예시:
- 미국 사용자는 Shard A, 유럽 사용자는 Shard B.
- 장점:
- 지역 기반 요청에 빠르게 응답 가능.
- 단점:
- 지역별 데이터 분포가 고르지 않을 경우 불균형 문제 발생.
5. Shard의 사용 사례
- 분산 데이터베이스
- MongoDB, MySQL 등에서 데이터를 분산 저장하여 확장성과 성능을 높임.
- 대규모 사용자 시스템
- 소셜 네트워크, e-commerce 등에서 사용자 데이터를 샤드로 분리.
- 예: 사용자 ID를 기준으로 데이터 분리.
- 로그 저장
- 로그 데이터를 시간별로 샤드에 분리하여 관리.
- 예: 하루 단위로 샤드를 생성.
- 클라우드 기반 스토리지
- AWS S3, Google Cloud Storage 등은 내부적으로 샤딩 구조를 사용하여 대규모 데이터를 관리.
6. Shard와 관련된 개념
6.1 Shard Key
- 데이터를 샤드에 분배할 때 사용하는 키.
- 효율적인 샤드 키를 설계하면 데이터 분포 균형과 성능 최적화가 가능.
6.2 Shard Replication
- 각 샤드를 복제하여 고가용성과 장애 복구를 지원.
- 샤드가 장애를 겪더라도 복제본(replica)을 통해 서비스 지속 가능.
6.3 Shard Rebalancing
- 데이터가 불균등하게 분포될 경우 샤드를 재조정하여 균형을 맞춤.
- 자동 리밸런싱은 운영 효율성을 높이는 데 중요.
7. Shard와 Partition의 차이
- Shard:
- 데이터를 여러 서버(물리적/논리적)로 분산.
- 주로 분산 시스템에서 사용.
- Partition:
- 단일 서버 내에서 데이터를 논리적으로 분할.
- 스토리지 효율과 쿼리 최적화를 위해 사용.
'DB' 카테고리의 다른 글
DB에서 Lock 이란? (0) | 2025.01.21 |
---|---|
트랜잭션 (Transaction) (0) | 2025.01.21 |
Grouping 이란? (0) | 2025.01.21 |
SQL 쿼리 기본적인 것들 정리 (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ) (0) | 2025.01.21 |
순차 쓰기와 랜덤쓰기 (0) | 2025.01.20 |