반정규화란?
- 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미
- 협의의 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미
- 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
반정규화 절차
- 반정규화도 하나의 난이도 높은 데이터 모델링의 실무기술이다.
- 반정규화에 대한 필요성이 결정이 되면 컬럼의 반정규화 뿐만 아니라 테이블의 반정규화와 관계의 반정규화를 종합적으로 고려하여 적용
- 반정규화를 막연하게 중복을 유도하는 것만을 수행하기 보다는 성능을 향상시킬 수 있는 다른 방법들을 고려하고 그 이후에 반정규화를 적용하도록 해야 한다.
테이블 반정규화
테이블병합
- 1:1 관계 테이블 병합: 1:1관계를 통합하여 성능향상
- 1:M 관계 테이블 병합: 1:M 관계를 통합하여 성능향상
- 슈퍼/서브타입 테이블 병합: 슈퍼/서브관계를 통합하여 성능향상
테이블 분할
- 수직분할: 컬럼단위의 테이블을 디스크I/O 분산처리를 하기 위해 테이블로 1:1로 분리하여 성능 향상(트랜잭션의 처리되는 유형 파악이 선행되어야 함)
- 수평분할: 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근 효율을 높여 성능을 향상하기 위해 로우 단위로 테이블을 쪼갬(관계가 없음)
테이블 추가
- 중복테이블 추가: 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하여 성능을 향상
- 통계테이블 추가: SUM/ AVG 등을 미리 수행하여 계산해둠으로써 조회시 성능을 향상
- 이력 테이블 추가: 이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법은 반정규화 유형
- 부분 테이블 추가: 하나의 테이블의 전체 칼럼 중 자주 이용하는데 자주 이용하는 집중화된 컬럼들이 있을 때 디스크I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 생성, 실무에서 자주 쓰임
컬럼 반정규화
- 중복 컴럼 추가 : 조인에 의해 처리할 때 성능 저하를 예방하기 위해 즉, 조인을 감소시키기 위해 중복된 칼럼을 위치 시킴, 실무에서 자주 쓰임
- 파생 컬럼 추가: 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 값을 성능저하를 예방하기 위해 미리 값을 계산하여 컬럼에 보관함
- 이력 테이블 컬럼 추가: 대향의 이력 데이터를 처리할 때 불특정날 조회나 최근 값을 조회할 때 나타날 수 있는 성능저하를 예방하기 위해 이력테이블에 컬럼 추가 (최근값 여부, 시작과 종료일자 등)
- PK에 의한 컬럼 추가: 복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생됨, 단일 PK안에서 특정값을 별도로 조회하는 경우 성능 저하가 발생함, 이때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 생성하는 방법이 PK에 의한 컬럼 추가 반정규화임
- 응용시스템의 오작동을 위한 컬럼 추가: 업무적으로 의미가 없지만 사용자가 데이터 처리를 하다가 잘못 처리하여 원래의 값으로 복구를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법임. 컬럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을 이력데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있음
관계 반정규화
- 중복 관계 추가: 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법이 관계의 반정규화임 (유저-주문-배송관계에서 유저-배송 관계를 추가하여 배송정보를 바로 가져올 수 있다.), 실무에서 자주 쓰임
- 데이블과 컬럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터 처리의 성능을 향상시킬수 있는 반정규화의 기법이 된다.
데이터무결성이란?
데이터의 Lifecycle 동안 모든 데이터가 얼마나 완전하고, 일관되며, 정확한지를 나타내는 정도
정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우
예시1
예시2
'Computer Science > 데이터베이스' 카테고리의 다른 글
데이터 베이스 구조와 성능 (0) | 2023.06.08 |
---|---|
대량 데이터에 따른 성능 (0) | 2023.06.08 |
정규화와 성능 (0) | 2023.06.08 |
성능 데이터 모델링 (0) | 2023.06.07 |
식별자(Identifiers) (1) | 2023.06.07 |