CHATPER01 | 데이터 모델링의 이해
2. 데이터 모델과 성능
📍 성능 데이터 모델링의 개념
분석/설계 단계부터 데이터베이스 성능을 고려한 데이터 모델링을 수행하는 기법
⭕ 성능 데이터 모델링의 절차
- 정규화 : 데이터 중복을 제거하여 데이터 처리 성능을 향상
- 용량산정 : 데이터베이스의 현재 용량과 예상 증가량을 조사
- 트랜잭션 유형 파악 : 데이터의 분할 및 조인 여부 조사
- 반정규화 : 테이블, 컬럼, 관계에 대해 반정규화 수행
- 데이터 구조 조정 : 이력 유형, PK/FK 순서, 슈퍼타입/서브 타입 조정
- 데이터 모델 검증 : 성능 관점에서 데이터 모델을 검증
📍 데이터베이스 정규화(DB Normalization)의 개념
데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상현상을 방지하고, 데이터의 일관성을 유지하기 위해 무손실 분해하는 과정
🔎 이상현상 릴레이션을 조작할 때 데이터가 불필요하게 중복되어 일관성이 유지되지 못하는 현상
📍 함수적 종속성(Functional Dependency)
- 데이터가 가지고 있는 속성 간의 관계에 의해 결정되고 종속되는 현상
- 데이터의 기준 값을 결정자(Determinant)라고 하고, 종속되는 값을 종속자(Dependent)라고 한다.
(결정자) -> (종속자)
⭕ 함수적 종속성의 유형
- 부분 함수 종속성 : 복합식별자의 부분적인 속성이 일반 속성을 결정하는 상태
- 완전 함수 종속성 : 식별자의 전체 속성이 일반 속성을 결정하는 상태
- 이행 함수 종속성 : 식별자가 아닌 일반 속성이 다른 일반 속성을 결정하는 상태
- 결정자 함수 종속성 : 후보키가 아닌 결정자가 존재하는 상태
⭕ 데이터 베이스 정규화 단계
- 1차 정규화 : 테이블 내의 속성값을
원자값
으로 구성하는 단계
- 2차 정규화 :
부분 함수 종속성
을 제거하는 단계
- 3차 정규화 :
이행 함수 종속성
을 제거하는 단계
- BCNF(Boyce-Codd Normal Form) :
결정자 함수 종속성
을 제거하는 단계
⭕ 데이터베이스 정규화의 성능 고려사항
- 정규화를 하면 데이터 처리 조건에 따라 성능이 향상될 수도 있지만, 반대로 성능이 저하될 수도 있다.
- 정규화로 인해 조인이 증가하는 경우에는 데이터 조회 성능이 저하될 수 있다.
- 데이터 조회와 입력/수정/삭제 성능이 Trade-off되어 발생하기도 한다.
📍 반정규화(De-Normalization)의 개념
- 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법이다.
- 역정규화 또는 비정규화라고 부르기도 한다.
⭕ 반정규화 절차
대상을 조사하고, 다른방법을 먼저 유도한 후, 반정규화를 수행한다.
1. 반정규화 대상 조사
- 범위처리 빈도수 조사 : 일정한 범위를 조회하는 프로세스가 많은지 확인
- 대량의 범위처리 조사 : 대량의 데이터 범위를 자주 처리하는지 확인
- 통계성 프로세스 조사 : 통계 정보를 필요로 하는 프로세스가 있는지 확인
- 테이블 조인 개수 : 테이블에 조인의 개수가 많은지 확인
2. 다른 방법 유도
- 뷰(View) 테이블 : 성능을 고려한 뷰를 생성
- 클러스터링 적용 : 클러스터링 팩터에 의해 저장방식을 다르게 적용
- 인덱스의 조정 : 인덱스 변경 및 생성
- 응용 애플리케이션 : 응용 메모리 영역에서 데이터를 캐시 처리
3. 반정규화 적용
- 테이블 반정규화 : 테이블 병합, 분할, 추가
- 컬럼 반정규화 : 중복 컬럼, 파생 컬럼, 이력컬럼 추가
- 관계 반정규화 : 중복 관계 추가
⭕ 반정규화 기법
✔ 테이블
- 테이블 병합 : 1:1 관계, 1:M 관계, 슈퍼/서브 타입 테이블 병합
- 테이블 분할 : 테이블을 수직 또는 수평으로 분할
- 테이블 추가 : 중복, 통계(집계), 이력, 부분 테이블 추가
✔ 컬럼
- 중복 컬럼 추가 : 조인을 감소시키기 위해 다수 테이블에 중복된 컬럼을 추가
- 파생 컬럼 추가 : 계산에 의한 성능 부하를 예방하기 위해 미리 값을 게산한 컬럼을 추가
- 이력 컬럼 추가 : 이력 데이터에서 최근 값을 조회하기 위한 기능성 컬럼을 추가
- 임시 컬럼 추가 : 애플리케이션 오작동 시 이전 데이터로 복구하기 위한 임시 컬럼을 추가
- 기본키에 의한 컬럼 추가 : 단일 속성인 PK가 복합 의미를 갖는 경우에 개별 의미를 일반 속성에 포함
✔ 관계
- 중복관계 추가 : 여러 경로를 거쳐야 조인이 가능한 경우 추가적인 관계를 생성해서 성능을 향상
⭕ 반정규화의 성능 고려사항
중복성의 원리를 이용해서 데이터 조회성능을 향상시키는 역할을 한다.
📍 대용량 데이터의 성능 저하 원인
✔ 데이터의 양이 많은 경우
- 데이터 양이 많아지면 인덱스의 용량이 커져서, 인덱스 변경이 필요한 입력, 수정, 삭제, 트랜잭션에서 성능 저하가 발생
- 데이터 양의 증가로 인덱스의 Tree 구조가 커지면, 인덱스 단계가 깊어지면서 조회 성능도 저하됨
✔ 컬럼의 수가 많은 경우
- 컬럼의 수가 많아지면 데이터가 다수 블록에 저장되므로, 다수의 I/O를 발생 시켜서 성능 저하가 발생
- 로우체이닝(Row Chaining), 로우 마이그레이션(Row Migration) 현상 발생
🔎 로우 체이닝(Row Chaining) 하나의 로우가 다수의 블록에 저장되는 현상
🔎 로우 마이그레이션(Row Migration) 데이터에 대한 수정이 발생할 때, 기존 블록이 아닌 새로운 블록에 저장하는 현상
⭕ 대용량 데이터의 성능 향상 방법
✔ 파티셔닝 (Partitioning)
- 하나의 테이블을 다수의 파티션(Partition)으로 분할하는 기법
- 물리적인 파티셔닝을 통해 데이터를 파티션 단위로 관리
- 부하를 각 파티션으로 분산시켜 성능을 향상
✔ 테이블 분할
- 하나의 테이블을 다수의 테이블로 분할하는 기법
- 테이블 분할을 통해서 I/O를 줄이고 성능을 향상
⭕ 파티셔닝(Partitioning)
대용량 테이블을 보다 작은 파티션으로 관리함으로써 성능 저하를 방지하고 데이터 관리를 용이하게 하는 기법
레인지 파티셔닝
: 파티션 키 값의 범위를 기준으로 파티션을 구분하는 기법
해시 파티셔닝
: 해시 함수의 값에 따라 파티션을 구분하는 파티셔닝 기법
리스트 파티셔닝
: 파티션에 값 목록을 할당해서 파티션을 구분하는 기법
컴포지트 파티셔닝
: 레인지 파티셔닝, 해시 파티셔닝, 리스트 파티셔닝 중 2개 이상의 파티셔닝을 결합하는 파티션 기법
⭕ 테이블 분할
하나의 테이블을 다수의 테이블로 분할하는 기법으로써 테이블 접근에 대한 I/O를 줄이고 성능을 향상시킨다.
수평 분할
: 하나의 테이블을 다수의 테이블로 수평 분할하는 기법
수직 분할
: 하나의 테이블을 다수의 테이블로 수직 분할하는 기법
📍 슈퍼타입과 서브타입 데이터 모델의 변환 방법
슈퍼타입과 서브타입 데이터 모델은 물리 모델링 단계에서 1:1 타입, 슈퍼+서브 타입, All in One 타입으로 변환할 수 있다.
1:1 타입 (One to One Type)
: 슈퍼타입과 서브타입 모델을 개별 테이블로 생성
슈퍼+서브 타입 (Plus Type)
: 슈퍼타입을 각 서브 타입에 통합하고, 서브 타입을 개별 테이블로 생성
All in One 타입 (Single Type)
: 슈퍼타입과 서브 타입 모델을 하나의 테이블로 통합해서 생성
⭕ 슈퍼타입과 서브 타입 데이터 모델의 성능 고려사항
트랜잭션의 특성을 고려하지 않고 슈퍼타입과 서브 타입 데이터 모델을 변환하면 데이터베이스의 성능이 저하되는 문제가 발생한다.
개별 트랜잭션 발생
- 슈퍼타입과 서브 타입 각각에 업무 트랜잭션이 독립적으로 발생하는 경우에는 1:1 타입으로 변환
슈퍼타입+서브 타입 트랜잭션 발생
- 슈퍼타입과 서브 타입을 묶어서 트랜잭션이 발생하는 경우에는 슈퍼+서브 타입으로 변환
전체 트랜잭션 발생
- 전체를 하나로 묶어 트랜잭션이 발생하는 경우에는 All in One 타입으로 변환
📍 기본키(PK), 외래키(FK) 성능 고려사항
기본키는 인덱스와 PK 컬럼 순서를 고려해야 하고, 외래키는 인덱스와 업무적 활용도를 고려해야 한다.
기본키(PK)
- PK 제약조건을 구현하기 위해서 Unique 인덱스를 사용
- Random Access를 위해 Unique 인덱스를 사용하면 데이터 조회 성능이 향상됨
- 복합 컬럼으로 구성된 PK에서 등치조건(=)이나 범위조건(BETWEEN, <, >)을 사용하는 컬럼을 선두 컬럼으로 정해야 인덱스를 효율적으로 이용 가능
- PK 컬럼 순서를 조정하지않으면, 데이터 조회 성능이 저하될 수 있음
외래키(FK)
- FK 속성에 대해 인덱스를 생성하지 않으면, 데이터 조회 성능이 저하될 수 있음
- FK 속성에 기본정책으로 인덱스를 생성하고, 업무적으로 자주 활용되지 않는 경우에 인덱스 삭제를 고려함
📍 분산 데이터베이스의 개념
- 네트워크를 통해 물리적으로 분산된 데이터베이스를 하나의 논리적 데이터베이스로 사용하는 시스템
- 다수의 지역으로 노드를 분산시켜 데이터베이스 성능을 향상
- 분산 데이터베이스 구성으로 데이터 백업이 가능하지만, 데이터가 실시간으로 동기화되지는 않는다.
⭕ 분산 데이터 베이스의 투명성
- 지역 사상 투명성 : 지역 DBMS와 물리적 DB 사이의 매핑을 보장하는 성질
- 중복 투명성 : 데이터가 다수의 물리적인 공간에 중복을 저장되어 있는지 알 필요가 없는 성질
- 분할 투명성 : 하나의 논리적 릴레이션이 다수의 단편으로 분할되어 저장되는 성질
- 위치 투명성 : 데이터의 물리적인 위치를 명시할 필요가 없는 성질
- 장애 투명성 : 지역 데이터베이스, 네트워크 장애가 발생하더라도 데이터 무결성을 보존하는 성질
- 병행 투명성 : 다수의 트랜잭션을 수행해도 데이터의 일관성을 유지하는 성질
⭕ 분산 데이터베이스의 성능 고려사항
- 원거리 서버에 접속할 때 발생하는 네트워크 부하와 트랜잭션 집중 현상은 기존 데이터 베이스의 성능 저하를 발생
- 데이터를 분산 환경으로 구성하면 근거리 서버 접속이 가능해져 Global Single Instance(GSI)보다 더 빠른 성능을 제공
🔎 Global Single Instance(GSI) : 통합된 데이터베이스 구조를 의미하며, 분산 데이터베이스와는 대치 개념