✅성능 데이터 모델링이란?
데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인구조, PK, FK, 등 성능과 관련된 여러 사항이 데이터 모델링에 반영될 수 있도록 하는 것.
✅성능 데이터 모델링 수행 시점
분석/설계 -> 구현 -> 테스트 -> 운영
: 사전에 할수록 비용 적음
: 분석/설계 단계에서 DB 처리 성능을 향상시킬 수 있는 방법을 주도면밀하게 고려해야 함
✅성능 데이터 모델링 고려사항
1) 정규화를 정확하게 수행
2) 데이터베이스 용량 산정을 수행
3) 데이터베이스에서 발생되는 트랜잭션의 유형을 파악
4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행
5) 이력 모델의 조정, PK/FK 조정, 슈퍼 타입/서브타입 조정을 수행
6) 성능관점에서 데이터 모델을 검증
✅정규화와 성능 향상 전략
: 데이터의 중복 속성을 제거하고, 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
: 정규화된 테이블은 속도가 빨라질 수도, 느려질 수도 있음
(조회는 처리 조건에 따라 성능 향상 or 저하 / 입력,수정,삭제는 무조건 성능이 향상됨)
✅정규화 용어
- 정규화: 관계형 DB 테이블의 삽입/삭제/갱신 이상 현상 발생을 최소화하기 위해 좀 더 작은 단위의 테이블로 설계하는 과정. 즉, 데이터 모델을 정규형에 맞도록 고치는 과정
- 정규형: 정규화 규정. 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성
- 함수적 종속성: 테이블의 특정 컬럼A의 값을 알면 다른 컬럼 B 값을 알 수 있을 때, 컬럼 B는 컬럼A에 함수적 종속성이 있다고 함
- 결정자: 함수적 종속성 설명에서 컬럼 A를 결정자라고 함.
✅정규화 이론
1) 1차 정규화
: 함수종속, 복수의 속성값을 갖는 속성을 분리, 속성의 원자성 확보
-> 모든 속성은 원자 값을 가져야 함
-> 다중 값을 가질 수 있는 속성은 분리되어야 함
2) 2차 정규화
: 함수종속, 주식별자에 완전종속적이지 않은 속성의 분리
-> 제 1정규형을 만족하는 상태에서 모든 Non-key 컬럼은 기본 키 전체에 종속되어야 함
-> 기본 키에 종속적이지 않거나 기본 키 일부 컬럼에만 종속적인 컬럼은 분리되어야 함.
3) 3차 정규화
: 함수종속, 일반속성에 종속적인 속성의 분리 / 이전종속 속성을 분리
-> 제 2정규형을 만족하는 상태에서 일반속성들간에도 종속관계가 존재하지 않아야 함
-> 일반속성들 간 종속관계가 존재하는 것들은 분리되어야 함
✅반정규화와 성능
: 협의의 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법.
: 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미
: 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행함
✅반정규화 기법
1) 테이블 반정규화
기법분류 | 기법 | 내용 |
테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합하여 성능향상 |
1:M 관계 테이블 병합 | 1:M 관계를 통합하여 성능향상 | |
슈퍼/서브타입 테이블 병합 | 슈퍼/서브관계를 통합하여 성능향상 | |
테이블 분할 | 수직분할 | 컬럼 단위의 테이블을 디스크 I/O 분산처리를 하기 위해 테이블을 1:1로 분리하여 성능 향상 |
수평분할 | 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스트 I/O 및 데이터 접근 효율을 높여 성능을 향상하기 위해 로우 단위로 테이블을 분리 | |
테이블 추가 | 중복 테이블 추가 | |
통계 테이블 추가 | ||
이력 테이블 추가 | ||
부분 테이블 추가 |
2) 컬럼의 반정규화 -> 매우 자주 쓰임
중복 컬럼 추가
파생 컬럼 추가
이력 테이블 컬럼 추가
PK에 의한 컬럼 추가
응용시스템의 오작동을 위한 컬럼 추가
3) 관계 반정규화
중복 관계 추가
'데이터 분석' 카테고리의 다른 글
[SQLD] 개념정리 - SQL 기본(1): DML, DDL, DCL, TCL, 트랜잭션 (1) | 2023.09.07 |
---|---|
[SQLD] 개념정리 - 데이터 모델과 성능(2): 테이블 분할, 슈퍼/서브 타입, 분산 데이터베이스 (0) | 2023.09.05 |
[SQLD] 개념정리 - 데이터 모델링의 이해(3): 관계, 식별자, 식별자관계 (2) | 2023.09.02 |
[SQLD] 개념정리 - 데이터 모델링의 이해(2): 엔터티, 인스턴스, 속성 (0) | 2023.08.18 |
[SQLD] 개념정리 - 데이터 모델링의 이해(1): 데이터 모델링, 데이터베이스 기본 (0) | 2023.08.17 |