본문 바로가기

SQLD

11일차- 반정규화와 성능

 반정규화의 정의

반정규환 정규화를 반대로 한다는 얘기이고 비정규화는 아예 정규화를 하지 않은 모델을 지칭할때 쓰는 것이다.

 반정규화를 정의하면 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다. 디스크 I/O량이 많아 성능이 저하 되거나, 경로가 너무 멀어서 성능이 저하 되거나, 칼럼을 계산해서 읽을 때 성능이 저하 되는 것들을 반정규화를 수행하면 성능이 좋아진다.

 기본적으로 정규화는 입력/ 수정/ 삭제에 대한 성능을 향상시킬 뿐만 아니라 조회에 대해서도 성능을 향상시키는 역할을 한다. 그러나 정규화만을 하면 엔티티 수가 증가하고 관계가 많아지므로 여러 조인을 해야 데이터를 가져올수 있게 된다. 따라서 부분적인 반정규화를 고려해 처리성능을 높이는것이 목표이다. 프로젝트에서는 설계단계에서 반정규화를 적용하게 되는데 반정규화를 기술적으로 수행하지 않는 경우에는 다음과 같은 현상이 발생한다.

1. 성능이 저하된 DB가 생성될 수 있다.

2. 후에 구축단계나 시험단계에서 반정규화를 적용할 때 수정에 따른 노력비용이 많이 들게 된다.

 

 반정규화의 적용방법

반정규화도 하나의 난이도 높은 데이터 모델링의 실무기술이다. 반정규화를 막연하게 중복을 유도하는 것만을 수행하기 보다는 성능을 향상시킬 수 있는 다른 방법들을 고려하고 그 이후에 반정규화를 적용하도록 해야 한다. 반정규화를 적용할 때는 기본적으로 데이터 무결성이 깨질 가능성이 많이 있기 때문에 반드시 데이터 무결성을 보장할 수 있는 방법을 고려한 이후에 반정규화를 적용하도록 해야 한다. 따라서 반정규화를 적용할 때에는 데이터 무결성이 중요함을 알고 데이터 무결성이 충분히 유지될 수 있도록 프로세스 처리에 있어서 안정성이 먼저 확인이 되어야 한다.

**데이터 무결성 데이터의 정확성, 일관성, 유효성이 유지되는 것을 말한다.**

 

 반정규화를 하기 전에 우선 다른 방법이 있지는 않는지 충분히 모색해야 한다. 예를들어 뷰를 사용하여 지나치게 많은 조인문제를 해결하거나 클러스터링을 적용해 조회성능을 향상 시키거나 PK를 이용하여 부분적인 테이블로 분리하는 방법이 있다. 충분한 검토를 거친 후에도 방법이 없다면 반정규화를 진행 한다.

 

 반정규화 기법

1. 테이블 반정규화

- 테이블 병합, 테이블 분할, 테이블 추가 등의 방법이 있다.

2. 칼럼 반정규화

- 중복칼럼 추가, 파생칼럼 추가, 이력테이블 칼럼추가, PK에 의한 칼럼추가, 응용시스템 오작동을 위한 칼럼추가 등이 있다.

3. 관계 반정규화

- 중복관계 추가.

 

'SQLD' 카테고리의 다른 글

10일차 - 데이터모델의 성능  (0) 2021.03.04
9일차- 데이터 모델의 성능  (0) 2021.03.03
8일차-식별자  (0) 2021.02.25
7일차-문제풀이  (0) 2021.02.20
7일차- 관계  (0) 2021.02.20