강의 링크 : https://www.youtube.com/watch?v=iAf9zQjW1NM&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=5
1. 성능 데이터 모델링 개요
정의
- 데이터베이스 성능을 고려하여 데이터 모델링을 수행하는 것
- 정규화, 반정규화, 테이블 통합 및 분할, join 구조, PK/FK 설정 등
수행 시점
- 빠를수록 좋음
- 분석/설계 단계에서 성능 모델링 수행 → 재업무 비용(cost) 최소화
- 일반적인 경우
- 대충 설계 → 성능 저하 → 해당 부분만 SQL 튜닝
성능 데이터 모델링 진행 순서
- 정규화를 정확하게 수행
- 데이터베이스 용량산정 수행
- 각 엔터티에 어느 정도의 액세스나 트랜잭션(해당 데이터에 접근하는 빈도)이 들어오는지 파악
- 데이터베이스에 발생되는 트랜잭션의 유형 파악
- 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 이력모델의 조정, 인덱스를 고려한 PK/FK의 순서 조정, 슈퍼타입/서브타입 조정 등 수행
DBMS의 발전
60s : 파일 구조
70s : 계층형, 망형 DB
80s : 관계형 DB
90s : 객체 관계형 DB
2. Relational Data Model
관계형 데이터베이스
- 70s 영국 수학자 E. F. Codd가 제안
- 기업의 핵심 데이터는 대부분 관계형 DB로 저장되어 있음
- 관계형 DB는 SQL 문장에 의해 관리됨
테이블
1) Constraints
도메인 제약 : 속성에 대한 제약
키 제약 : 테이블에 대한 제약
개체 무결성 제약 : PK에 대한 제약
참조 무결성 제약 : FK에 대한 제약
3. 정규화와 성능
1) 이상현상
- 이상현상을 방지하기 위해서는 DB 설계를 잘 해야하고, 잘 하기 위해서는 정규화 를 잘 해야함
- 과목코드 + 학번 : 복합 키(복합 식별자)
- 예시 테이블을 깔끔하게 만들려면, 주제에 따라 테이블을 나눠야 함(과목, 수강, 학생) = 정규화
- 삭제 이상(delete anomaly)
- 어떤 정보를 삭제하면서, 다른 정보도 원하지 않게 삭제되는 경우
- 삽입 이상(insert anomaly)
- 관련 없는 다른 정보가 존재하지 않아(null), 원하는 정보를 입력하지 못 하는 경우(key attribute가 null)
- 갱신 이상(update anomaly)
- 하나의 정보를 수정하는데, 여러번의 업데이트를 해야하는 경우
2) 함수종속 및 정규화
정규화(Normalization)
4. 반정규화와 성능
반정규화의 정의
- 반정규화(=역정규화=Denormalization)
- 정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법
- cf) 비정규화 : 정규화를 아예 수행하지 않음
특징
- 테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함
- 과도한 반정규화 → 데이터 무결성을 침해하게 됨
반정규화의 사전 절차
반정규화 기법
- 칼럼 반정규화
- 중복칼럼 추가
- 파생칼럼 추가
- 이력테이블칼럼 추가
- PK의 의미적 분리를 위한 칼럼 추가
- 데이터 복구를 위한 칼럼 추가
- 테이블 반정규화
- 테이블 병합 - 관계 병합, 슈퍼/서브타입 병합
- 테이블 분할 - 수직 분할, 수평 분할
- 테이블 추가 - 중복 테이블 추가, 통계 테이블 추가, 이력 테이블 추가, 부분 테이블 추가
- 관계 반정규화
- 데이터 모델링 수행
- 데이터베이스 용량 산정
- 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴 분석
- 트랜잭션이 칼럼 단위로 집중되는 경우 수직 분할, 로우 단위로 집중되는 경우 수평 분할 수행
※ 해시 함수(Hash Function)
- 임의의 길이의 데이터를 짧은 길이의 데이터로 매핑하는 함수
이력테이블 컬럼 추가 vs 이력테이블 추가
- 추가되는 최근 값이 (Y,N)이면 이력 테이블 컬럼 추가
- 추가되는 최근 값이 날짜 등이면 이력테이블 추가
1) 인덱스 특성을 고려한 PK/FK 설정
인덱스(Index)
Select 학번, 이름, 학년 # 테이블에 대해
from 학생 # 세로 필터링
where 학번 > 3000 and 학번 < 5000 # 가로 필터링
- 검색 속도 향상을 위한 기술 → 실제 테이블을 Full scan하지 않고 인덱스 테이블을 검색
- 지나치게 많은 인덱스 생성시 시간 및 공간 낭비
- 인덱스된 필드의 업데이트시 시간 증가
- 자동 생성(PK 또는 Unique 조건) / 수동 생성(Create Index 구문)
인덱스 스캔 구조 이해
-
PK의 속성 순서대로 인덱스가 정렬됨
-
FK 인덱스 설정을 통한 성능 향상
5. 분산 데이터베이스와 성능
분산 데이터베이스의 개념
- 물리적으로 분산된 데이터베이스를 하나의 논리적 시스템으로 사용
분산 데이터베이스의 장단점
분산 데이터베이스의 적용 기법
- 테이블 위치 분산
- 테이블 분할(Fragmentation) 분산
- 각 테이블을 분할하여 분산함(수평 분할/수직 분할)
- 테이블 복제(Replication) 분산
- 동일 테이블의 복사본을 여러 서버에서 동시에 관리함
- 부분 복제(Segment Replication)
- 본사는 통합 테이블 관리, 각 지사에서는 지사에 해당된 로우만 관리
- 실제로는 지사에서 먼저 테이블 발생 → 본사에서 전체 통합
- 광역 복제(Broadcast Replication)
- 동일한 테이블을 여러 곳에 복제하여 관리
- 본사에서 데이터의 입력, 수정, 삭제 발생 → 지사에서 이를 반영
- 테이블 요약(Summarization) 분산
- 유사한 내용의 데이터를 서로 다른 관점/수준에서 요약하여 분산 관리
- 분석 요약(Rollup Replication)
- 각 지사별 '동일한 주제'의 정보를 본사에서 통합하여 전체 요약 정보 산출
- 예: 상품 A의 지사1, 지사2의 매출 정보 요약 → 전체 매출 정보 요약
- 통합 요약(Consolidation Replication)
- 각 지사별 '상이한 주제'의 정보를 본사에서 단순 취합하여 제공
- 예: 지사1의 상품A, 지사2의 상품B에 대한 매출 정보 요약 → 전체 매출 정보 요약
분산 설계 고려사항
- 성능이 중요한 사이트에 적용해야 함
- 공통코드, 기준정보, 마스터 데이터 등에 대해 분산 구성시 성능 향상
- 실시간 동기화가 요구되지 않을 때 바람직
- Near Real Time 업무의 경우도 분산 환경 구성 가능
- 특정 서버에 집중된 부하를 분산시키기 위한 목적으로도 가능
- 백업 사이트(Disaster Recovery Site) 구성 시 분산 설계의 개념을 적용할 수 있음