DB 파티셔닝(Partitioning)이란?
DB 파티셔닝(Partitioning)은 대규모 데이터베이스 테이블을 더 작고 관리하기 쉬운 파티션으로 분할하는 방법입니다. 각 파티션은 논리적으로는 하나의 테이블처럼 보이지만, 물리적으로는 독립적인 여러 부분으로 나뉘어 저장됩니다. 이를 통해 데이터 관리, 성능 최적화, 유지보수 작업 등을 보다 효율적으로 수행할 수 있습니다.
DB 파티셔닝의 장단점
장점
- 성능 향상:
- 쿼리 성능 개선: 데이터 접근 범위를 좁힘으로써 쿼리 성능을 향상시킨다.
- 병렬 처리: 파티션 단위로 병렬 처리가 가능하여 성능이 향상된다.
- 관리 용이성:
- 데이터 아카이빙: 오래된 데이터를 파티션 단위로 쉽게 아카이빙할 수 있다.
- 데이터 유지보수: 파티션 단위로 백업, 복구, 재구성 등을 수행할 수 있어 유지보수가 용이
- 가용성 및 확장성:
- 부분 장애 허용: 특정 파티션에 문제가 생기더라도 다른 파티션은 정상적으로 운영 가능
- 확장 용이성: 데이터 증가에 따라 새로운 파티션을 추가하여 확장 가능
- 데이터 로드 및 삭제 속도 향상:
- 빠른 로드/삭제: 파티션 단위로 데이터를 로드하거나 삭제할 수 있어 속도가 빨라진다.
단점
- 복잡성 증가:
- 설계 및 관리: 파티션 설계가 복잡해질 수 있으며, 관리하는 데 추가적인 노력이 필요하다.
- 애플리케이션 변경: 기존 애플리케이션이 파티셔닝된 데이터베이스와 호환되도록 변경이 필요할 수 있다.
- 성능 저하 가능성:
- 잘못된 파티셔닝: 부적절한 파티셔닝 전략은 오히려 성능을 저하시킬 수 있다.
- 파티션 간 조인 비용: 여러 파티션에 분산된 데이터를 조인하는 경우 성능 저하가 발생할 수 있다.
- 추가적인 저장 공간 필요:
- 인덱스 중복: 각 파티션마다 인덱스를 유지해야 하기 때문에 추가적인 저장 공간이 필요하다.
DB 파티셔닝의 종류
수평 파티셔닝 (Horizontal Partitioning)
수평 파티셔닝은 데이터베이스의 테이블을 행(row) 단위로 분할하는 방법입니다. 각 파티션은 동일한 테이블 구조를 가지며, 특정 조건을 만족하는 행들을 각각의 파티션에 저장합니다. 이는 대개 큰 테이블을 여러 작은 테이블로 나누어 성능을 개선하고 관리 효율성을 높이기 위해 사용됩니다.
예시:
- 범위 분할: 테이블을 날짜나 ID 범위에 따라 분할. 예를 들어, 사용자 테이블을 가입 연도에 따라 분할하여 2019년, 2020년, 2021년 가입자 데이터를 각각의 파티션에 저장.
- 해시 분할: 사용자 ID의 해시 값을 기준으로 분할하여 데이터를 여러 파티션에 균등하게 분배.
장점:
- 데이터 접근 성능 개선: 각 파티션에 대한 쿼리는 더 적은 데이터를 스캔하게 되어 성능이 향상됨.
- 관리 용이성: 특정 파티션에 대한 백업, 복구, 아카이빙 작업이 쉬워짐.
- 장애 격리: 한 파티션에 문제가 발생해도 다른 파티션에는 영향이 없음.
단점:
- 복잡한 쿼리: 파티션 간 조인이 필요할 경우 쿼리가 복잡해지고 성능이 저하될 수 있다.
- 설계 및 관리 복잡성: 적절한 파티셔닝 키와 전략을 선택하는 것이 어려울 수 있다.
수직 파티셔닝 (Vertical Partitioning)
수직 파티셔닝은 데이터베이스의 테이블을 열(column) 단위로 분할하는 방법입니다. 각 파티션은 원래 테이블의 일부 열만을 포함하며, 테이블을 논리적으로 나누어 특정 열 그룹을 별도의 테이블로 분할합니다. 이는 대개 열의 빈도나 성격에 따라 분할하여 성능을 최적화하고 관리 효율성을 높이기 위해 사용됩니다.
예시:
- 핵심 데이터와 부가 데이터 분할: 사용자 테이블에서 자주 조회되는 핵심 정보(사용자 ID, 이름, 이메일 등)를 하나의 파티션에 저장하고, 덜 자주 조회되는 부가 정보(주소, 생일 등)는 다른 파티션에 저장.
- 열 그룹 분할: 트랜잭션 테이블에서 트랜잭션의 기본 정보(트랜잭션 ID, 날짜, 금액 등)를 하나의 파티션에 저장하고, 추가 정보(설명, 카테고리 등)는 다른 파티션에 저장.
장점:
- 성능 향상: 자주 조회되는 열만을 포함하는 파티션에서의 쿼리는 더 적은 데이터를 스캔하게 되어 성능이 향상된다.
- 관리 효율성: 각 파티션에 대해 별도의 인덱스 관리가 가능하여 최적화할 수 있다.
- 보안 및 접근 제어: 민감한 데이터를 포함하는 열을 별도의 파티션으로 분리하여 보안 수준을 강화할 수 있다.
단점:
- 데이터 일관성 유지: 여러 파티션에 분산된 데이터를 일관성 있게 관리하기 어렵다.
- 조인 비용: 여러 파티션에 분산된 데이터를 조인할 경우 성능 저하가 발생할 수 있다.
- 복잡성 증가: 테이블 구조가 복잡해지고 관리가 어려워질 수 있다.
요약
- 수평 파티셔닝: 데이터를 행 단위로 분할. 대규모 데이터를 여러 작은 단위로 나누어 성능과 관리 효율성 향상. 하지만 파티션 간 조인이 복잡할 수 있다.
- 수직 파티셔닝: 데이터를 열 단위로 분할. 자주 조회되는 열과 덜 자주 조회되는 열을 분리하여 성능을 최적화. 그러나 데이터 일관성 유지와 조인 비용이 문제될 수 있다.
DB 파티셔닝의 분할 기준
-
- 범위 분할 (Range Partitioning)
- 분할 키 값이 특정 범위 내에 있는지 여부에 따라 데이터를 분할
- 예시: 날짜를 기준으로 분할. 예: 2020년 데이터와 2021년 데이터로 분할.
- 목록 분할 (List Partitioning)
- 분할 키 값을 미리 정의된 값 목록에 따라 데이터를 분할
- 예시: Region 컬럼 값이 North, South, East, West에 따라 분할
- 해시 분할 (Hash Partitioning)
- 해시 함수의 결과 값을 기준으로 데이터를 분할
- 예시: 사용자 ID의 해시 값에 따라 4개의 파티션으로 분할
- 합성 분할 (Composite Partitioning)
- 여러 분할 방법을 조합하여 데이터를 분할
- 예시: 먼저 범위로 분할한 후 해시로 다시 분할
- 범위 분할 (Range Partitioning)
Referense
https://gmlwjd9405.github.io/2018/09/24/db-partitioning.html
'DB' 카테고리의 다른 글
Redis를 활용한 확장 가능한 세션 관리 전략 (0) | 2024.12.23 |
---|---|
트랜잭션이란? (0) | 2024.07.23 |
[DB] DDL, DML, DCL, TCL 이란? (0) | 2024.07.21 |
관계형 DB와 비관계형 DB의 차이(RDBMS vs NoSQL) (4) | 2024.07.11 |
[DB] 관계형 데이터베이스의 1:1, 1:N, N:M 관계 (4) | 2024.07.10 |