개발정보

반정규화 (성능 향상을 위한 데이터 중복 허용)

쿠카곰돌이 2019. 6. 22. 13:07
반응형

I. 반정규화의 개요

 가. 반정규화의 필요성

  - 정규화 시 빈번한 Join이 필요하여 검색 시간이 과다하게 소요

  - 대용량 데이터베이스에서 Partition의 기준으로 사용되는 Partition Key가 정규화로 인해 제거될 소지 존재

 

 나. 반정규화 고려 사항

  - 정합성과 데이터 무결성, 성능과 테이블 단순화의 Trade off를 검토.

  - 성능과 모델의 단순화에 대한 이점이 있지만 무결성 저하로 시스템의 안정성을 해칠 수 있어 반드시 정규화가 수행된 상태에서 적용

  - 데이터의 의미가 변형되거나 업무 규칙이 감추어져 서는 안됨

  - 데이터의 무결성을 유지시킬 수 있는 방안을 마련하고 반정규화 적용

  - 반정규화는 성능과 관리의 효율을 증대 시키지만 데이터의 일관성과 정합성은 위험을 내포하고 있어 충분한 검토 후에 수행

 

 다. 반정규화의 대상

  - 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우

  - 대량의 데이터 범위를 자주 처리하는 경우

  - 통계성 프로세스의 경우 별도의 통계 테이블 고려

  - 지나치게 많은 조인이 걸려 데이터 조회 작업이 어려운 경우

 

 

II. 반정규화의 유형

유형

 설명

 Table Merge

Parent Table에 Child Table의 속성을 삽입하고 Child Table 삭제

Join이 없어짐으로써 Access 성능이 없어짐

 Redundant Column 추가

Join하여 읽어올 속성을 양쪽 Table에 중복적으로 저장

갱신 횟수에 비해 조회 횟수가 많은 경우 혹은 더 중요 시에 적용

 Computed Column 추가

여러 숫자 필드를 Join하여 계산이 필요한 경우에 가장 조회가 많은 속성을 지닌 Table에 계산 결과 속성 추가

 Code Table Merge

코드명을 속성으로 추가하여 Join 제거

 Table 수직 분할

매우 많은 수의 Column으로 구성된 테이블에서 빈번하게 Access되는 Column과 Access 횟수가 적은 Column을 분리하여 구성

 Table 수평 분할

동일한 속성을 가진 테이블을 기준에 따라 2개로 분리

분리된 여러 Partition에 Data를 동시에 Load 할 수 있으므로 수행 시간을 줄일 수 있음

 

 

III. 반정규화의 절차 및 방법

. 반정규화의 절차

절차 

 방법

 설명

반정규화 

대상 조사

범위 처리 빈도수 조사

 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우

대량 범위처리 조사

 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리 범위를 일정하게 줄이지 않으면 성능 보장 불가의 경우

 통계성프로세스 조사

 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성

 테이블 조인 개수 조사

 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토

다른 방법 

유도 검토

 뷰(View) 테이블

지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용

 클러스터링 적용

대량의 데이터를 특정 클러스터링팩트에 의해 저장방식을 다르게 하는 방법(조회중심의 테이블에만 적용가능)

인덱스 적용

인덱스를 통해 성능을 충분히 확보할 수 있다면 인덱스를 조정하여 반정규화를 회피

 응용어플리케이션

응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상

 반정규화 적용

 테이블 / 속성 / 관계의 반정규화

 

 

. 반정규화의 방법

구 분

세부 방법

설명

테이블 반정규화

테이블 병합

조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적일 경우에 적용

1:M 관계는 데이터 중복 발생, 신중히 접근

테이블 분할

분할된 테이블의 전체 조회 시 union을 사용해야 하므로 성능이 느려짐

테이블 추가

논리적인 모델링이 끝난 후 추가적으로 통계 산출 발생 시 통계 테이블을 추가하여 테이블을 산출

컬럼

비정규화

중복 컬럼 추가

다른 테이블에 존재하는 속성 자주 이용 경우

확인하려는 정보가 너무 많은 조인으로 불필요한 낭비 발생 경우

파생 컬럼 추가

연산을 통해서 결과값을 자주 접근하게 될 경우 컬럼을 추가해 연산을 단순화

이력 테이블컬럼추가

시점 이력 테이블에 최신의 여부를 확인하기 위해 최신 날짜를 추가하는 경우

PK에 의한 컬럼추가

여러 컬럼으로 이루어진 PK를 가진 테이블을 조인할 경우 단순성을 위해서 인공키를 PK로 지정하고 활용

읽기 성능을 향상 시키고 SQL 문장을 더 간단히 작성 가능.

무결성 확보 어렵고 추가 저장공간 필요, 중복 속성 인해 원본 확인 어려움

관계 비정규화

조회 관계를 단순화 시키기 위해 관계를 중복

 

III. DW 시스템에서 반정규화 도입 이유

 

단계

내용

비즈니스 운영성 향상

반정규화를 수행함으로써 중복 데이터가 발생하여 조회성능은 저하될 수 있으나 ad-hoc(임의) 쿼리를 수행하며 관리,비즈니스 계획 및 실행을 위해 DW를 이용하는 사용자들의 만족도를 높일 수 있음

데이터 클러스터링의 사용 편이성

차원적 데이터 분석을 위하여 정규화를 거친 Multi-depth 데이터의 경우 Pivoting을 통한 정보 이해력이 떨어지므로,분석을 위해서 비정규화를 실시

데이터

적시성 향상

ETL 개발시간 및 수행시간을 단축하여 최신 데이터 반영의 주기를 빠르게 제공 가능함.

 

 

 

반응형