1. 파티셔닝(Partitioning)/샤딩(Sharding)
데이터베이스를 여러개로 나누어 분산시키는 기술용어로, 서비스 크기의 증가에 따라 DB의 크기가 증가하면서 성능을 향상시키기 위한 것이다. 자료가 매우 많아지면서 하나의 DBMS가 여러개의 테이블을 관리하기에는 성능적으로 문제가 생겼고 이에 따라 테이블을 나누어 관리하는 방법이 파티셔닝, 데이터베이스를 여러개 사용하는 방법이 샤딩이다.
1) 파티셔닝
큰 테이블이나 인덱스를 관리하기 쉬운 크기로 분리하는 방법
[1] 파티셔닝 방법
- Horizontal Partitioning( 수평 파티셔닝 )
- 수평 즉, 데이터의 개수를 기준으로 나누어 파티셔닝하는 방법이다.
- 하나의 테이블을 대상으로 튜플(행)의 개수가 많아지면 여러개의 테이블로 분산하여 저장하는 방법이다.
- 같은 데이터 스키마를 가진 여러 데이터를 여러개의 데이터 베이스에 저장하는 방법이 샤딩인데, 이런 점에서 샤딩과 같은 개념의 분할 방법이라고 볼 수 있다.
- Vertical Partitioning( 수직 파티셔닝 )
- 수직 즉, 컬럼(열)을 기준으로 데이터를 나눈다.
- 정규화 과정이라기 보다 정규화된 데이터이더라도 데이터를 더 작은 단위로 분리하는 과정이라고 볼 수 있다.
- 관계의 정규화 과정이라 볼 수 있다.
- 자주 사용하는 컬럼만을 분리하여 성능을 향상하는 방법이다.
- 수직 파티셔닝 과정에서 다른 장치를 사용하여 자주 사용되는 컬럼과 그렇지 않은 컬럼을 물리적(장치 자체가 다른)으로 분리 할 수 있다.
- 분리된 테이블들을 포함하는 뷰를 생성한다면 원래보다 성능이 저하되지만 일부(자주사용하는)만 사용한다면 성능이 향상된다.
2) 샤딩
DBMS한개로 처리하던 데이터를 데이터베이스를 여러개 사용하는 방식으로 조회의 한계를 극복하는 방법이다. 계속하여 증가하는 데이터에 장애 없이 효과적으로 대응 할 수 있게 하며 서비스마다 다른 데이터 특성과 모델에 대처하는 것이 샤딩의 핵심이다.
[1] 샤딩 VS 수평분할
수평분할은 스키마가 같은 데이터를 두개 이상의 테이블에 나누어 저장하는 것을 말한다. 즉, 같은 DB안에 같은 스키마의 테이블을 종류에 따라 나누는 것이다 예를 들면 남자테이블, 여자테이블, 혹은 노트북테이블모델, 데스크탑테이블모델 등으로 나누는 것이다.
샤딩은 물리적으로 아에 다른 데이터 베이스에 데이터를 분산하는 방식이다. 즉, 둘의 차이점은 같은 DB에 저장되느냐 아니냐의 차이라고 할 수 있다. 샤딩을 사용하면 기능(JOIN 등)에 제약이 있을 수 있고 일관성과 복제 등에서 불리한점이 많다.
[2] 문제점
- 다른 샤드끼리 JOIN을 할 수 없다.(여러 샤드를 넘나드는 쿼리를 실행할 수 없음)
- auto increment가 샤드별로 달라질 수 있다.(따로 처리를 하지 않으면 겹칠 수 있음)
- last_insert_id() 값은 유효하지 않다.
- 하나의 트랜잭션에서 두개 이상의 샤드에 접근할 수 없다.
(파티셔닝/샤딩)
https://seokbeomkim.github.io/posts/partition-and-sharding/
'ComputerScience > Database' 카테고리의 다른 글
[DataBase] 7. ORM (0) | 2021.06.04 |
---|---|
[DataBase] 6. 조인(JOIN) (0) | 2021.06.03 |
[DataBase] 4. 정규화 (0) | 2021.06.03 |
[DataBase] 3. 스키마 (0) | 2021.06.03 |
[DataBase] 2. 트랜잭션(Transaction) (0) | 2021.05.31 |
댓글