-
DB - 파티셔닝과 샤딩CS/DB 2021. 2. 12. 20:23
파티셔닝과 샤딩
파티셔닝과 샤딩
- 서비스 크기 증가에 따른 DB 크기 증가하며 VLDB(Very Large DBMS)가 등장했고 여러 테이블을 관리하며 생기는 성능 이슈를 해결하기 위해 파티셔닝과 샤딩이 나왔다.
파티셔닝
-
큰 테이블이나 인덱스를 관리하기 쉬운 크기로 분리하는 방법이다.
- 장점
- 가용성: 물리적인 노드 분리에 따라 전체 DB내의 데이터 손상 가능성이 줄어들고, 데이터 가용성이 향상된다.
- 관리 용이성: 큰 테이블을 제거하여 관리를 쉽게 할 수 있다,
- 성능: 대용량 Data Write환경에서 효율적이며 특정 DML과 쿼리 성능을 향상시킨다.
- 단점
- 테이블 간 JOIN비용 증가
- 테이블과 인덱스를 별도로 파티셔닝 할 수 없고 함께 파티셔닝 해야 한다.
- 방법
- Horizontal Partitioning(수평 파티셔닝)
- 스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장한다.
- ex) 주민 데이터 -> a동 주민, b동 주민
- 하나의 데이터베이스 안에서 이루어 진다.
- Vertical Partitioning(수직 파티셔닝)
- 테이블의 컬럼을 기준으로 데이터를 나눈다.
- 이미 정규화된 데이터를 분리하는 과정이다.
- 자주 사용하는 컬럼을 분리하여 성능 향상을 시킬 수 있다.
- Horizontal Partitioning(수평 파티셔닝)
샤딩
- 수평 파티셔닝과 동일하나, 수평 파티셔닝과 달리 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법을 말한다.
- 장점
- 데이터의 개수가 작아지고 따라서 인덱스의 개수도 작아져 성능이 향상된다.
- 데이터 훼손 가능성이 줄어든다
- 단점
- 데이터를 찾는 과정이 기존보다 복잡하다.
reference
seokbeomkim.github.io/posts/partition-and-sharding/
gmlwjd9405.github.io/2018/09/24/db-partitioning.html
'CS > DB' 카테고리의 다른 글
DB - Index (0) 2021.02.14 DB - KEY (0) 2021.02.12 DB - NOSQL (0) 2021.02.12 DB - 스키마 (0) 2021.02.12 DB - ORM (0) 2021.02.11