-
반정규화를 통한 성능향상 전략
가. 반정규화의 정의
- 반정규화(=역정규화) : 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발(development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다.
- 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
나. 반정규화의 적용방법
-
반정규화의 대상을 조사한다.
- 자주 사용되는 테이블에 접근(Access)하는 프로세스의 수가 많고 항상 일정 범위만을 조회하는 경우
- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우
- 통계성 프로세스에 의해 통계 정보를 필요로 할 때
- 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
-
반 정규화의 대상에 대해 다른 방법으로 처리할 수 있는지 검토한다.
- 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용하는 방법
- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정하는 방법
- 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리하는 방법(파티셔닝 기법)
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경하는 방법(응용 메모리 영역에서 값을 캐쉬, 캐쉬를 공유 등)
-
반정규화를 적용한다.
- 반정규화를 하는 대상으로는 테이블, 속성, 관계에 대해 적용할 수 있으며 꼭 테이블과 속성, 관계에 대해 중복으로 가져가는 방법만이 반정규화가 아니고 테이블, 속성, 관계를 추가할 수도 있고 분할할 수도 있으며 제거할 수도 있다.
-
반정규화의 기법
가. 테이블 반정규화
나. 컬럼 반정규화
다. 관계 반정규화
- 테이블과 컬럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터처리의 성능을 향상시킬 수 있는 반정규화의 기법이 된다.
- 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우 – 책 참조
- 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우 – 책 참조