3. 반정규화 (De-Normalization)

1) 반정규화

- 데이터베이스의 성능 향상을 위하여 데이터의 중복을 허용하고 조인을 줄이는 성능향상 방법

- 조회속도를 향상시키나 데이터 모델의 유연성은 낮아짐

- 무결성을 지킬 수 있는 방법으로 시행!


2) 반정규화 수행하는 경우

- 정규화에 충실하면 종속성 활용성은 향상되나, 수행 속도가 느려지는 경우

- 다량의 범위를 자주 처리하는 경우

- 특정 범위 데이터만 자주 처리하는 경우

- 요약/집계 정보가 자주 요구되는 경우


* 반정규화 절차

대상 조사 및 검토

 - 데이터 처리 범위, 통계성 등을 확인해 조사 

다른 방법 검토

 - 반정규화 수행 전 다른 방법 있는지 검토

 - 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토 

반정규화 수행

 - 테이블, 속성, 관계 

* 클러스터링 : 클러스터링 인덱스.. 인덱스 정보를 저장할 떄 물리적으로 정렬해서 저장하는 방법

조회 시 인접 블록을 연속적으로 읽기 떄문에 성능이 향상됨


3) 반정규화 기법

(1) 테이블 반정규화

테이블 병합 

 1:1관계 테이블 병합 

 

 1:N관계 테이블 병합

 

 수퍼/서브타입 테이블 병합

- 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합 (부모 자식 간의 관계)

 테이블 분할

 수직 분할 

- 칼럼을 분할하여 새로운 테이블을 만듬 (기본키를 가져감)

 수평 분할

- 로우 단위로 집중 발생되는 트랜잭션을 분석하여 특정 값을 기준으로 하나의 테이블을 분할

테이블 추가

 중복 테이블 추가

- 다른 업무 이거나 서버가 다른 경우 동일한 테이블 구조를 중복, 원격 조인 제거

 통계 테이블 추가

- SUM, AVG 등 미리 수행해 계산해 둠으로 조회 시 성능 향상 

 이력 테이블 추가

- 마스터 테이블이 존재하는 레코드를 중복 

 부분 테이블 추가

- 자주 이용하는 집중화된 칼럼을 모아놓은 별도의 테이블 생성 

* 슈퍼타입 및 서브타입 변환 방법

 OneToOne Type

 - 슈퍼 타입과 서브 타입을 개별 테이블로 도출 (개별테이블 유지)

 - 확장성 우수하나 조인 성능이 나쁨

 - 테이블 수가 많아 조인이 많이 발생, 관리 어려움, IO 성능이 좋음

 - 개별 테이블로 접근이 많은 경우 선택

 Plus Type

 - 슈퍼 타입 + 서브 타입 테이블로 도출

 - 확장성은 보통이고 조인성능이 나쁨

 - 조인이 발생하고 관리 어려움, IO 성능이 좋음

 - 슈퍼+서브 형식으로 데이터를 처리하는 경우 선택

 Single Type 

 - 슈퍼 타입과 서브 타입을 하나의 테이블로 도출

 - 확장성은 나쁘나 조인성능이 우수함

 - 조인 성능이 좋고 관리가 편함, IO 성능이 나쁨 

 - 전체를 일괄적으로 처리하는 경우 선택


* 파티션 기법 : 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장하는 기법

Range Partition : 데이터값의 범위를 기준으로 파티션 수행

List Partition : 특정 값을르 지정하여 파티션 수행

Hash Partition : 해시함수 적용하여 파티션 수행

Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션 수행

 - 파티션 테이블의 장점 : 조회 시 엑세스 범위가 줄어듬

데이터 분할되어 있으므로 IO성능 향상

각 파티션 독립적 백업, 복구 가능

(2) 칼럼 반정규화

 중복칼럼 추가

- 조인 처리시 성능저하 방지

- 조인을 감소시키기 위해 중복된 칼럼을 위치시킴 

 파생칼럼 추가

- 트랜잭션 처리시 성능저하 방지 

- 미리 값을 계산하여 칼럼에 보관

 이력테이블 칼럼 추가

- 대량의 이력데이터 처리시 발생할 성능저하 방지

- 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등) 추가 

 PK에 의한 칼럼 추가

- 복합 의미 갖는 PK를 단일속성으로 구성하였을 때 발생하는 성능저하 방지

- 이미 PK안에 데이터가 존재하나 성능향상을 위해 일반 속성으로 포함하는 방법 

 응용시스템 오작동을

 위한 칼럼 추가

- 데이터 처리중 잘못하여 원래 값으로 복구하기 원할 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법 


(3) 관계 반정규화

중복관계 추가

- 추가적인 관계를 맺어 조인시 성능저하  


+ Recent posts