데이터베이스 파티셔닝(partitioning)은 하나의 큰 테이블이나 인덱스를 물리적으로 여러 조각(파티션)으로 나누어 저장, 관리하는 방법을 말한다.
즉, 논리적으로는 한 테이블이지만, 실제 저장소에서는 여러 개의 작은 단위로 쪼개 두는 것이다.
데이터베이스에서 대용량 데이터를 효율적으로 저장, 관리하기 위해 사용하는 기법 중 하나이다.
- DB기법 중
저장 구조/데이터 관리 기법에 속한다.
- 트랜잭션, 쿼리 최적화 같은 논리적 처리 기법이 아닌,
물리적 데이터 배치 전략에 가깝다.
날짜와 같은 특정 범위만 조회할 때는 전체 테이블이 아닌 해당 파티션만 스캔하므로 쿼리 속도가 향상된다.
아무래도 한 테이블에서 찾는 것보다 어떤 단위로 쪼개 두면 그만큼 한 테이블의 데이터 개수가 적어지므로 속도가 향상될 것이다.
오래된 데이터 파티션만 쉽게 삭제, 백업, 이동이 가능하다.
테이블이 수십억 건 이상 커지더라도 각 파티션을 분산 저장, 관리가 가능하다.
ELECT * FROM orders WHERE order_date BETWEEN … 와 같이 쿼리를 작성한다. 즉 파티션을 설정해두면, 개발자는 평소와 같이 DB를 조회하면 된다.
인덱싱은 많이 들어보았던 것 같은데 이것과는 무슨 차이점이 있을까? 파티셔닝과 비슷한 개념과 비교를 해보면 아래와 같다.
실제 파티셔닝을 적용해보았는데, 그리 어렵지도 않고 한 번 설정해두면 DB안에서 자동으로 파티셔닝 자식 테이블에서 해당하는 데이터를 주므로 사용도 동일하게 하면 된다.
다만 자식 테이블 생성하는 로직은 필요하다. 파티셔닝에서 부모, 자식 개념이 있는데 자식 테이블에 저장이 되는 구조인 듯 하다. 이 부분은 cron으로 만들어주었고, 안전하게 default테이블도 생성해두었다.
다음 파티셔닝 글에서는 실제 사용해본 것을 자세히 정리해보아야겠다.