반정규화

zioo·2022년 2월 6일
0

Backend

목록 보기
26/40

성능 향상을 위한 데이터 중복 허용, 반정규화 개요.

ⅰ.

성능 향상을 위한 데이터 중복허용, 반정교화의 개요

가. 반정규화의 필요성

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

나. 정규화 고려사항

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

다. 반정규화의 대상

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

ⅱ.

반정규화의 유형

  1. Table Merge

    Parent Table에 Child Table의 속성을 삽입하고 Child Table 삭제.Join이 없어짐으로써 Access 성능이 없어짐

  2. Redundat Column 추가

    Join하여 읽어올 속성을 양쪽 Table에 중복적으로 저장.갱신 횟수에 비해 조회 횟수가 많은 경우 혹은 더 중요 시에 적용

  3. Computed Column 추가

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

  4. Code Table Merge

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

  5. Table 수직 분할

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

  6. Table 수평 분할

    동일한 속성을 가진 테이블을 기준에 따라 2개로 분리분리된 여러 Partition에 Data를 동시에 Load 할 수 있으므로 수행 시간을 줄일 수 있음

Ⅲ.

반정규화의 절차 및 방법

https://media.vlpt.us/images/sysop/post/cee91f67-a8e3-47a5-90af-f85819a88ca5/image.png

가. 반정규화의 절차

반정규화 대상조사

  • 범위처리빈도수 조사 : 자주 사용되는 테이블에 접근하는 프로세스 수가 많고,항상 일정한 범위만을 조회하는 경우
  • 대량 범위처리 조사 : 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리 범위를 일정하게 줄이지 않으면 성능 보장 불가의 경우
  • 통계성 프로세스 조사 : 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성
  • 테이블 조인 개수 조사 : 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토
  1. 다른 방법 유도 검토
  • View Table : 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용
  • 클러스터링 적용 : 대량의 데이터를 특정 클러스터링팩트에 의해 저장방식을 다르게 하는 방법(조회중심의 테이블에만 적용가능)
  • 인덱스 적용 : 인덱스를 통해 성능을 충분히 확보할 수 있다면 인덱스를 조정하여 반정규화를 회피
  • 응용어플리케이션 : 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상
  1. 반정규화 적용
  • 테이블 / 속성 / 관계의 반정규화

나. 반정규화의 방법

테이블 반정규화

  • 테이블 병합 : 조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적일 경우에 적용1:M 관계는 데이터 중복 발생, 신중히 접근
  • 테이블 분할 : 분할된 테이블의 전체 조회 시, union을 사용해야 하므로 성능이 느려짐
  • 테이블 추가 : 논리적인 모델링이 끝난 후 추가적으로 통계 산출 발생 시, 통계 테이블을 추가하여 테이블을 산출
  1. 칼럼 비정규화
  • 중복 칼럼 추가 : 다른 테이블에 존재하는 속성 자주 이용 경우 확인하려는 정보가 너무 많은 조인으로 불필요한 낭비 발생 경우
  • 파생 컬럼 추가 : 연산을 통해서 결과값을 자주 접근하게 될 경우 컬럼을 추가해 연산을 단순화
  • 이력 테이블 컬럼추가 : 시점 이력 테이블에 최신의 여부를 확인하기 위해 최신 날짜를 추가하는 경우
  • PK에 의한 컬럼추가 : 여러 컬럼으로 이루어진 PK를 가진 테이블을 조인할 경우 단순성을 위해서 인공키를 PK로 지정하고 활용
  • 읽기 성능을 향상 시키고 SQL 문장을 더 간단히 작성 가능. 무결성 확보 어렵고 추가 저장공간 필요, 중복 속성 인해 원본 확인 어려움
  1. 관계 비정규화
  • 조회 관계를 단순화 시키기 위해 관계를 중복

참고 [ 반 정규화 사례 ]

1.

https://media.vlpt.us/images/sysop/post/27c7a2a3-ab8d-4116-9db4-7dc92e0d6f1b/image.png

2.

https://media.vlpt.us/images/sysop/post/2c4d28b7-9ec0-4f24-81ef-fb5aecc0a7f2/image.png

3.

https://media.vlpt.us/images/sysop/post/4dceb4f9-f584-4ad4-8298-2b5a50f6bfb2/image.png

4.

https://media.vlpt.us/images/sysop/post/0009732d-6e11-4659-b27e-3887d834b903/image.png

5.

https://media.vlpt.us/images/sysop/post/7e1c72e8-b095-4c9e-bcfa-3d7622d06019/image.png

<br>
<br>
<br>
<br>
<br>
<bold>THE END...</bold>

0개의 댓글