DB 파티셔닝이란?
서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량의 한계와 성능의 저하 를 가져오게 되었다.
이것을 해결하기 위한 방법으로 테이블을 여러부분으로 분할하는 데이터베이스 튜닝 기법을 DB파티셔닝이라고 한다.
DB파티셔닝의 이점
- 가용성(Availability): 물리적인 Partitioning으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다. 각 분할 영역을 독립적으로 백업하고 복구할 수 있다.
- 관리용이성(Manageability): 각 분할 영역(partition별로)을 독립적으로 백업하고 복구할 수 있다.
- 성능(Performance): 특정 DML과 Query의 성능을 향상시킨다. 주로 대용량 Data Write 환경에서 효율적이다. Table FullScan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.
DB파티셔닝의 단점
- Table간의 Join에 대한 비용이 증가한다.
- Table과 Index를 별도로 파티션 할수는 없다. 같이 Partitioning 하여야 한다.
DB 파티셔닝 종류
파티셔닝에는 수평분할(Horizontal Partitioning)과 수직분할(Vertical Partitioning) 두가지 방법이 있다.
수평분할(Horizontal Partitioning)
수평분할은 말 그대로 하나의 테이블의 각 행들을 분할하는 것이다.
- 수평분할은 샤딩(Sharding)과 동일한 개념이다.
- 스키마(Schema)를 복제한 후 샤드키를 기준으로 데이터를 나누는 것을 말한다. 즉, 스키마(Schema)가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다.
장점
- 데이터의 개수를 기준으로 나누어 파티셔닝한다.
- 데이터의 개수가 작아지고 따라서 index의 개수도 작아지게 된다. 자연스럽게 성능은 향상된다.
단점
- 서버간의 연결과정이 많아진다.
- 데이터를 찾는 과정이 기존보다 복잡하기 때문에 latency가 증가하게 된다.
- 하나의 서버가 고장나게 되면 데이터의 무결성이 깨질 수 있다.
수직분할(Vertical Partitioning)
수직분할은 테이블의 일부를 분할하는 것을 말한다.
- 수직분할은 테이블의 컬럼들중에 특정 컬럼을 쪼개서 따로 저장하는것을 말한다.
- 스키마(Schema)를 나누고 데이터가 따라 옮겨가는 것을 말한다.
하나의 엔티티를 2개 이상으로 분리하는 작업이다.
장점
- 자주 사용하는 컬럼 등을 분리시켜 성능을 향상시킬 수 있다.
DB파티셔닝의 분할 기준
범위분할
- 분할 키 값이 범위 내에 있는지 여부로 구분한다.
- 예를들어 키를 160~170, 170~180 범위로 구분하는 것
목록분할
- 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
- 예를들어 도시를 하남시, 고양시, 안양시, 군포시 를 묶으면 경기도라는 파티션을 생성 할 수 있다.
해시분할
- 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정한다.
- 예를 들어 4개의 파티션으로 분할하는 경우 해시 함수는 0–3의 정수를 돌려준다.
합성분할
- 위의 분할 기술들을 결합하여 분할하는 것을 말한다.