• Home
  • About
    • Monu Kim photo

      Monu Kim

      Strike while the iron is hot

    • Learn More
    • Email
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[데이터 모델링] 성능 데이터 모델링

05 Mar 2023

Reading time ~3 minutes

성능 데이터 모델링의 개요

DB 성능 향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것.

  • 수행시점 : 분석/설계 단계, 성능 데이터 모델링 시점이 늦어질수록 재업무 비용이 증가한다.
  • 고려 사항 : 정규화 수행, DB 용량 산정과 트랜잭션 유형 파악을 통한 반정규화 수행, 정규화는 무조건 수행되어야한다. (데이터모델 구조, 대용량의 데이터, 인덱스 특성)

정규화와 성능

정규화(Normalization) : 다양한 유형의 검사를 통해 데이터 모델을 좀 더 구조화하고 개선시켜 나가는 절차. 중복성 제거, 관심사 별로 처리되는 경욱 많아 성능이 향상된다.

  • 정규형(NF, Normal Form) : 정규화로 도출된 데이터 모델이 갖춰야할 특성
  • 함수적 종속성(FD, Functional Dependency) : 결정자와 종속자의 관계, 결정자의 값으로 종속자의 값을 알 수 있음
    • 다치 종속(MVD, Multivalued Dependency) : 여러 칼럼이 동일한 결정자의 종속자일 때
  • 정규화 이론
    • 1차 2차 3차 보이스코드정규화는 함수적 종속성에 근거
    • 4차 정규화는 다치 종속을 제거
    • 5차 정규화는 조인에 의한 이상현상을 제거해 정규화 수행
      1. 1차 정규화 : 속성의 원자성 확보, 다중값 속성을 분리
      2. 2차 정규화 : 부분 함수 종속성 제거, 일부 기본키에만 종속된 속성으 ㄹ분리, 기본키가 하나의 칼럼일 때 생략 가능
      3. 3차 정규화 : 이행 함수 종속성 제거, 서로 종속관계가 있는 일반 속성을 분리함, 주식별자와 관련성이 가장 낮음
      4. 보이스 코드 정규화(BCNF, Boyce-Codd Normal Form) : 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자의 분리함
      5. 4차 정규화, 5차 정규화 : 다치 종속 분리, 결합 종속 분리
  • 정규화 성능 : 정규화는 입출력 데이터 양을 줄여 성능 향상 [조회/입력,수정,삭제] 2가지로 분류
    • 정규화로 인한 성능 향상
      • 입력,수정,삭제 시 성능은 항상 향상 됨
      • 유연성 증가 : High Cohension & Loose Coupling 원칙에 충실해짐
      • 재활용 가능성 증가 : 개념이 세분화 됨
      • 데이터 중복 최소화
    • 정규화로 인한 성능 저하
      • 조회 시 처리 조건에 따라 성능 저하가 발생할 수도 있음 ⇒ 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용하게 됨
        • 반정규화로 해결 가능
        • 조인이 발생하더라도 인덱스를 사용하여 조인 연산을 수행하면 성능 상 단점이 거의 없고, 정규화를 통해 필요한 인덱스의 수를 줄일 수 있음
        • 정규화를 통해 소량의 테이블이 생성된다면 성능 상 유리할 수 있음(반정규화된 테이블의 성능이 더 떨어지는 경우)

반정규화와 성능

데이터 중복을 허용하여 조인을 줄이는 DB 성능 향상 방법, 데이터의 무결성을 희생하고 조회 성능 향상, 프로젝트의 설계 단계에서 반정규화를 적용한다.(구축 및 시험단계에서 적용시 노력비용이 증대한다.)

  • 절차
    1. 반정규화 대상 조사 : 데이터 처리 범위 및 통계성 등 조사(범위 처리 빈도수, 대량 범위 처리, 통계성 프로세스, 테이블 조인 개수)
    2. 다른 방법 검토 : 뷰, 클러스터링, 인덱스 조정, 애플리케이션
    3. 반정규화 적용 : 정규화 수행 후 반정규화 수행
  • 기법
    • 테이블 반정규화
      • 테이블 병합
        • 1:1 관계 테이블 병합
        • 1:N 관계 테이블 병합 → 많은 데이터 중복 발생
        • 슈퍼타입/서브타입 테이블 병합
      • 테이블 분할 : 수직분할(칼럼단위, 테이블 1:1로 분리), 수평분할(로우단위)
      • 테이블 추가
        • 중복 테이블 : 업무나 서버가 다를 때 중복 테이블 생성(원격 조인 제거)
        • 통계 테이블 : SUM, AVG 등 미리 계산, 조회 시 성능 향상
        • 이력 테이블 : 마스터 테이블 레코드 중복하여 이력 테이블에 존재
        • 부분 테이블 : 자주 이용하는 칼럼으로 구성된 테이블 생성
    • 칼럼 반정규화
      • 중복 칼럼 추가
      • 파생 칼럼 추가 : 필요한 값 미리 계산한 칼럼(Derived 칼럼) 추가
      • 이력 테이블 칼럼 추가 : 기능성 칼럼(최근값 여부, 시작 및 종료일자 등) 추가
      • PK에 의한 칼럼 추가:PK의 종속자를 일반속성으로 생성
      • 응용 시스템의 오작동을 위한 칼럼 추가 : 이전 데이터 임시적 중복보관(원래값 복구 용도)
    • 관계 반정규화 : 데이터 무결성 보장 가능(정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우 존재)
      • 중복 관계 추가


studydatabasedata modelingsqld Share Tweet +1