성능 데이터 모델링의 정의
데이터베이스 성능을 고려하여 데이터 모델링을 수행하는 것이다.
정규화, 반정규화, 테이블 통합 및 분할, 조인 구조, PK / FK 설정 등이 있다.
수행시점
빠를 수록 좋다. 분석 설계 단계에서 성능 모델링을 수행하게 되면 재업무 비용이 최소화된다.
일반적인 경우 대충 설계해 성능 저하가 오면 그때 해당 부분만 SQL 튜닝한다.
성능 데이터 모델링 진행 순서
1. 정규화를 정확하게 수행한다.
2. 데이터베이스 용량 산정 수행한다.
3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다. (트랜잭션 : 쪼갤 수 없는 업무 처리의 최소 단위)
4. 용량과 트랜잭션의 유형에 따라 반 정규화를 수행한다.
5. 이력 모델의 조정, 인덱스를 고려한 PK/FK의 순서 조정, 슈퍼타입/서브타입 조정 등 수행한다.
DBMS의 발전
> 1960년대
파일구조를 통해 데이터를 저장하고 관리하였다.
> 1970년대
데이터베이스 관리 기법이 처음 출현했다.
계층형, 망형 데이터베이스 제품이 상용화되었다.
> 1980년대
관계형 데이터베이스가 상용화되었다.
오라클, Sybase 등의 제품이 사용되었다.
> 1990년대
오라클, Sybase, SQL Server 외 많은 제품이 출현하였다.
객체 관계형 데이터베이스가 발전하였다.
관계형 데이터베이스
1970년대 영국의 수학자인 E.F.Codd 박사의 논문에서 제안하였다.
기업 핵심 데이터는 대부분 관계형 데이터베이스로 저장되어 있다.
관계형 데이터베이스는 SQL 문장에 의해 관리된다.
테이블
테이블 : 행과 열의 2차원 구조를 가진 데이터 저장 객체 - 관계형 데이터베이스의 기본 단위
칼럼/열 : 테이블에서 세로 방향으로 이루어진 개별 속성
로우/행 : 테이블에서 가로 방향으로 이루어진 연결된 데이터
관계형 데이터모델 제약조건
- 도메인 제약
: 속성에 대한 제약이다. 속성 값은 원자성을 가지며, 도메인에서 정의된 값이어야 한다는 것이다.
- 키 제약
: 릴레이션(테이블)에 대한 제약이다. 릴레이션의 모든 튜플(튜플,레코드,행)은 서로 식별 가능해야 한다는 것이다.
- 개체 무결성 제약
: 기본키에 대한 제약이다. 기본키는 Not Null & Unique 이어야 한다는 것이다.
- 참조 무결성 제약
: 외래키에 대한 제약이다. 릴레이션R1이 릴레이션R2를 참조하는 경우
R2의 기본키는 R1에서 외래키로 사용된다는 것이다.
R1이 릴레이션 R2를 참조하는 경우 R1의 FK는 Null이거나 Null이 아닐 경우 R2에 존재하는 값으로 구성되야 한다.
이상현상
: 삭제 이상, 삽입 이상, 갱신 이상
정규화
목적 : 삭제, 삽입, 갱신 이상현상을 방지하기 위함이다.
함수적 종속성에 기반한다. ( 함수적 종속성 - 데이터들이 어떤 기준값에 의해서 항상 종속이 되는 현상 )
정규형의 종류로는 1NF, 2NF, 3NF.. 가 존재한다.
1NF : 모든 값이 원자 값을 가짐
2NF : 부분 함수 종속 제거
3NF : 이행 함수 종속 제거, 식별자가 아닌 속성이 결정자 역할을 하는 함수 종속 제거
2차 정규화를 통해 2NF 생성
: 부분 함수 종속 제거
3차 정규화를 통해 3NF 생성
: 이행 함수 종속 제거
정규화의 효과
데이터 중복 감소로 성능이 향상된다.
데이터가 관심사별로 묶여 성능이 향상된다.
조회 질의에서 조인이 많이 발생에 성능이 저하된다.
-> 정규화를 통해 일반적으로 성능이 향상되나, 조회의 경우 처리 조건에 따라 성능이 향상되거나 저하된다.
정규화를 통한 성능 개선 예
> 특정 학생의 학년 변경시
정규화 전 : 해당 학생이 수강 테이블에서 나타나는 수만큼 변경
정규화 후 : 해당 학생의 학년 한 건만 변경
> 3학년 학생의 학번, 이름 조회시
정규화 전 : 수강 이력이 누락된 수만큼 인스턴스 조회
정규화 후 : 학생 수만큼 인스턴스 조회(성능 향상)
> 학번, 학생명, 과목명, 평점 조회시
정규화 전 : 하나의 테이블에서 모두 조회
정규화 후 : 조인 필요(약간의 성능 저하)
반정규화의 정의
정규화된 엔티티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법이다.
(비정규화랑 안헷갈리게 주의)
반정규화의 특징
테이블, 컬럼, 관계의 반정규화를 종합적으로 고려해야 한다.
과도한 반정규화는 데이터 무결성을 침해하게 된다.
반정규화의 사전 절차
1. 반정규화 대상 조사
2. 다른 방법유도 검토 : 뷰 생성, 클러스터링 적용, 인덱스의 조정, 응용 애플리케이션
뷰 생성 : 뷰 자체가 성능 향상을 가져오지는 않는다. 신중하게 설계된 뷰를 재사용할 때 성능 향상된다.
클러스터링(군집화) : 자주 사용되는 테이블의 데이터를 디스크와 같은 블록에 저장한다.
인덱스의 조정 : 인덱스 추가, 삭제 및 순서 조정한다.
응용 애플리케이션 : 데이터 처리를 위한 로직을 변경한다.
3. 반정규화 적용
반정규화 기법
> 칼럼 반정규화 (반 정규화 기법1)
중복 칼럼 추가 : 조인 횟수 감소 위해 다른 테이블의 칼럼을 중복으로 저장한다.
파생 칼럼 추가 : 예상되는 값 미리 계산해 중복으로 저장한다.
이력 테이블 칼럼 추가 : 이력 테이블에 최근값, 종료여부 등의 칼럼을 중복으로 추가한다.
PK의 의미적 분리를 위한 칼럼 추가 : PK가 복합 의미를 갖는 경우 조회 성능 향상을 위해 일반 속성을 추가한다.
데이터 복구를 위한 칼럼 추가 : 원래 값으로 복구 위해 이전 데이터를 임시적으로 중복 저장한다.
> 테이블 반정규화 (반 정규화 기법2)
▷ 테이블 병합
- 관계 병합 : 두 테이블의 동시 조회가 많은 경우 1:1 또는 1:M 관계를 병합하는 것이다.
- 슈퍼/서브타입 관계를 병합한다.
ㄴ 개별 접근 트랜잭션이 많은 경우 : One to One Type으로 변환한다.
ㄴ 슈퍼타입 + 서브타입 접근 트랜잭션이 많은 경우 : Plus Type으로 변환한다.
ㄴ 여러 서브타입에 대한 동시접근이 많을 때 : All in One Type으로 변환한다.
▷ 테이블 분할 절차
1. 데이터 모델링 수집
2. 데이터베이스 용량 산정
3. 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴 분석
4. 트랜잭션이 칼럼 단위로 집중되는 경우 수직분할, 로우 단위로 집중되는 경우 수평분할을 수행한다.
(테이블 수평 분할에서 3가지 : 범위로 분할, 값으로 분할, 해쉬 함수로 분할)
▷ 테이블 추가
이력 테이블 추가 : 가장 최근 값을 중복으로 기록한 테이블을 생성한다.
부분 테이블 추가 : 집중적으로 자주 사용되는 특정 속성들을 추출하여 별도의 테이블을 구성한다.
중복 테이블 추가 : 동일한 테이블 구조를 중복시킨다.
통계 테이블 추가 : 통계값을 미리 계산하여 저장한다.
> 관계 반정규화 (반 정규화 기법3)
조인을 통해 정보 조회가 가능하지만 조인 경로 단축을 위해 중복관계를 추가한다.
앞서 언급되었던 반정규화의 사전 절차 - 2. 다른 방법유도 검토 - 인덱스의 조정 을 자세히 살펴보자
인덱스
검색 속도 향상을 위한 기술이다. 실제 테이블을 풀스캔하지 않고 인덱스 테이블을 검색할 수 있다.
지나치게 많은 인덱스 생성시 시간, 공간을 낭비하게 된다.
인덱스된 필드의 업데이트시 시간 증가한다.
자동 생성(PK 또는 Unique 조건) / 수동 생성(Create Index 구문)
인덱스 스캔 구조
PK의 속성 순서대로 인덱스가 정렬된다.(만들어진다)
따라서 인덱스를 고려해서 PK 순서를 설정해야 한다.
Select 수험번호 From 입시 Where 년도 = '2000'; 할 경우
테이블에서 수험번호, 년도 순으로 있는 것(이러면 Full Table Scan함) 을 년도, 수험번호 순으로 바꿔주어야 한다.
FK 인덱스 설정을 통한 성능 향상
고객번호가 '1111'인 고객 대여 기록 조회할 경우(고객테이블2천건,대여테이블500만건 존재)
대여 테이블 고객 번호에 인덱스를 설정하면 성능이 향상된다.
분산 데이터베이스
물리적으로 분산된 데이터베이스를 하나의 논리적 시스템으로 사용하는 것이다.
분산 데이터베이스의 장단점
> 장점
지역 자치성이 증가한다. 신뢰성과 가용성이 증가하고 효용성과 융통성이 증가한다.
빠른 응답 속도에 통신 비용이 절감된다. 각 지역 사용자의 요구 수용이 가능하다.
> 단점
소프트웨어 개발 비용이 증가하고 오류의 잠재성이 커진다. 통제가 어려워지고 데이터 무결성 유지가 어려워진다.
분산 데이터베이스의 적용 기법
- 테이블 위치 분산 : 테이블을 각각 다른 장소에 위치시킨다.
- 테이블 분할 분산 : 각 테이블을 분할하여 분산한다. (수평 분할, 수직 분할)
- 테이블 복제 분산 : 동일 테이블의 복사본을 여러 서버에서 동시에 관리한다.
ㄴ 부분 복제 : 본사는 통합 테이블을, 각 지사는 지사에 해당된 로우만 관리한다. 지사에서 데이터 발생, 본사에서 통합
ㄴ 광역 복제 : 동일한 테이블을 여러 곳에 복제해 본사에서 데이터 입력,수정,삭제 발생하면 지사에 이를 반영한다.
- 테이블 요약 분산 : 유사한 내용의 데이터를 서로 다른 관점/수준에서 요약하여 분산 관리한다.
ㄴ 분석 요약 : 각 지사별 동일 주제의 정보를 본사에서 통합해 전체 요약 정보 산출한다.
ㄴ 통합 요약 : 각 지사별 상이한 주제의 정보를 본사에서 단순 취합하여 제공한다.
분석 설계 고려사항
성능이 중요한 사이트에 적용해야 한다.
공통 코드, 마스터 데이터 등에 대해 분산 구성시 성능이 향상된다.
실시간 동기화가 요구되지 않을 때 바람직하다.
특정 서버에 집중된 부하를 분산시키기 위한 목적으로도 가능하다.
백업 사이트 구성 시 분산 설계 개념을 적용할 수 있다.
'전공 지식 정리 > 데이터베이스 설계' 카테고리의 다른 글
데이터베이스 SQL - Function (0) | 2022.11.28 |
---|---|
데이터베이스 SQL문 DDL (0) | 2022.10.24 |
데이터베이스 SQL문 DML (0) | 2022.10.23 |
데이터베이스의 개요 (3) | 2022.03.22 |
#0 데이터베이스 설계 계획표 (0) | 2022.03.22 |