파티션
논리적인 데이터 element를 다수의 entity로 쪼개는 행위.
큰 테이블이나 인덱스를 파티션 단위로 분할하는 것.
파티션 사용하게 된 배경
서비스의 크기가 커지고 데이터 규모가 커면서 DBMS의 용량과 한계, 성능이 저하되면서 테이블을 파티션이라는 단위로 나뉘어 관리하는 파티셔닝 기법이 등장함.
->소프트웨어적인 데이터베이스 분산 처리가 가능해졌다
그렇다면 파티션 목적은?
-
성능면에서 특정DML과 쿼리 성능을 향상시킨다. 대용량 write 환경에서 효율적이다.
full scan에서 데이터 접근 범위를 감소시켜서 성능을 향상시킨다.
-
가용성면에서 물리적인 파티셔닝으로 전체 데이터 훼손 가능성이 줄어든다.
파티션 별로 독립적인 백업과 복구가 가능하다.
-
관리적인 면에서도 큰 테이블을 줄일 수 있어서 용이하다.
파티션의 장점
- 파티션 단위 백업, 추가, 삭제 , 변경이 가능하다.
- 파티션 단위 조회 및 DML를 수행함으로써 필요한 부분만 탐색할 수 있다.
파티션의 단점
- JOIN으로 인한 비용이 증가한다.
- 테이블과 인덱스를 별도로 파티셔닝하는 건 불가능하다.
파티션의 종류
1. 수평 파티셔닝
스키마가 같은 테이블을 두 개 이상의 테이블에 나누어 저장한다.
- 키를 기반으로 여러 곳에 저장-> 퍼포먼스, 가용성이 목적이다.
- 일반적인 분산 저장 기술로 보통의 하나의 데이터베이스 내에서 이루어지는 경우가 많아.
- 장점: 데이터 개수를 기준으로 나누고 인덱스의 개수를 줄여서 성능이 높아진다.
- 단점: 서버간의 연결 과정이 많아지고 데이터 탐색 과정이 복잡해져서 latency(지연시간)이 길어진다. 서버 고장 시 데이터 무결성에 취약하다.
2. 수직 파티셔닝
모든 컬럼 중 특정 컬럼을 쪼개서 따로 저장하는 형태이다. 하나의 엔티티를 2개 이상으로 분리한다.
- 정규화와 유사한 개념이지만 수직 파티셔닝은 정규화된 데이터를 분리하는 과정이다.
- 장점: 자주 사용하는 컬럼을 분리하여 성능을 향상시킨다. 같은 타입의 데이터를 저장해서 높은 데이터 압축률을 보여준다.
파티셔닝 분할 기준
- 범위 분할
분할 키 값이 범위 내에 있는지 여부로 구분 ex) 우편번호
- 목록 분할
값 목록에 파티션 할당
- 해시 분할
해시 함수의 값에 따라 파티션 포함 여부 결정
- 합성 분할
여러가지 분할 기술의 결합
참고)
https://wedul.site/425
https://docs.oracle.com/cd/B12037_01/server.101/b10743/partconc.htm