- 성능 데이터 모델링
: DB 성능향상을 목적으로, 설계 단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블 통합, 조인구조 등등
데이터 모델링에 반영될 수 있도록 하는 것
- 성능 데이터 모델링 고려사항 순서
1. 데이터 모델링시 정규화를 정확하게 수행한다
2. DB 용량산정을 수행한다.
3. DB에 발생되는 트랜잭션의 유형을 파악한다.
4. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
5. 이력모델의 조정, pk/fk 조정, 슈퍼/서브 타입 조정
6. 성능관점에서 데이터 모델을 검증한다
- 정규화
: 반복적인 데이터를 분리하고, 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것
- 1차 정규화
: 같은 성격, 내용 컬럼이 연속될 때 속성의 원자성을 확보하고 기본키를 설정한다.
: 함수적 종속성을 근거로한 정규화이다. 기본키를 잡는다 = 제1정규화
: 한 개의 속성으로 유일성을 만족할 수 있는지 확인 -> 식별자를 찾는다
- 2차 정규화
: pk가 2개이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거한다.
: 기본키 2개이상 분리 = 제2정규화
-3차 정규화
: pk가 아닌 일반 컬럼에 의존하는 컬럼을 분리한다. 즉, 이행함수종속성을 분리한다.
: 칼럼간에 종속성이 발생하는 부분을 테이블로 빼면, 테이블이 도출되고 제3정규화가 이루어진다.
- 반정규화란
: 정규화된 테이블에 시스템의 성능향상등을 위해 중복, 통합, 분리등을 수행하는 데이터베이스 성능향상방법!
-반정규화 대상조사
: 자주 사용하는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위를 조회하는 경우
: 대량의 데이터가 있고 접근속도와 처리속도가 보장되지 않는경우
: 통계성 프로세스에 의해 통계 정보를 필요로 하는 경우
: 테이블에 지나치게 많은 조인이 걸려있어 조회작업이 어려울경우
**클러스터링 : 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우, 조회가 대부분일때 클러스터링을 적용한다
**파티셔닝 : 대량의 데이터를 pk의 성격에 따라 부분적인 테이블로 물리적 저장공간을 분리하는것
**캐시 : 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로서 성능을 향상 (개발자 짬밥이라는것 같다)
- 반정규화 적용
1. 테이블 추가 :
중복칼럼 추가 ( 조인처리시 성능저하를 예방하기 위해 중복칼럼을 추가시킨다 )
파생칼럼 추가 ( 트랜잭션이 처리될때 성능저하를 예방하기 위해 미리 값을 새로운 칼럼에 저장한다. 합계 같은..)
이력테이블 칼럼추가 ( 대량의 이력데이터 처리시 성능저하를 예방하기위해 최근값등 기능성 칼럼을 추가하는것)
2. 테이블 분할 :
수직분할 : 하나의 테이블을 두 개 이상의 테이블로 분할.
수평분할 : 로우단위로 테이블을 쪼갠다
3. 테이블 추가 :
중복 :
통계 :
이력 :
부분 :
4. 관계 반정규화 (무결성을 유지하기 위함이다)
중복관계 추가 : 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만, 추가적인 관계를 미리 맺어놓는다
**로우 체이닝 : 로우의 길이가 너무 길어서 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
**로우 마이그레이션 : 데이터 블록에서 수정이 발생하면 해당 데이터 블록에서 저장 못하고, 다른 빈공간을 찾아 저장하는 방식
5. 파티셔닝
Range Partition :
List Partition :
Hash Partition :
6. 테이블에 대한 수평/수직 분학의 절차
**컬럼이 많다면 -> 1:1 분리를 한다
**데이터가 많다면 -> 파티셔닝을 한다
- 슈퍼/서브 타입 모델
슈퍼 타입 : 각 엔터티가 각자 공통으로 가질 수 있는 타입. 꼭 식별 x 공통타입이라고 생각하자!
서브 타입 : 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성이다.
-슈퍼 타입 / 서브 타입 변환 방법
OneToOne Type : 슈퍼타입과 서브타입을 개별 테이블로 도출한다. 테이블이 많고 조인이 많이 발생한다.
Plus Type : 슈퍼 + 서브 타입으로 테이블로 도출한다.
Single Type : 전체를 하나로 묶어 트랜잭션 발생시 하나의 테이블로 구성한다. 관리는 편하지만 입출력 성능이 좋지 않다.
- 분산 데이터베이스
- 중앙 집중형 데이터 베이스 : 여러명의 사용자가 한 대의 물리적 시스템에 접속하여 데이터베이스를 사용하는 구조
- 분산 데이터 베이스 : 물리적으로 떨어진 데이터베이스가 네트워크로 연결되어 분산된 작업을 처리 수행하는 구조
-> 따라서 사용자가 분산 데이터 베이스를 사용하더라도, 중앙 집중형 처럼 정확하고, 투명하며 직관적인 DB를 제공해야한다!
- 분산 데이터베이스를 만족하기 위한 투명성 목표 !
**시험에 자주나오니 개념을 정확히 숙지하자
+ 지역사상 투명성 : 지역의 DB와 물리적 DB 사이의 맵핑이 보장되어있어서, 지역의 성능과 특색과 무관한 데이터베이스를 사용가능하다
- 분산 데이터베이스의 장단점
장점 :
- 데이터베이스 신뢰성과 가용성이 높다
- 분산 데이터베이스의 병렬처리로, 빠른응답이 가능하다
- 시스템 용량 확장이 쉬우며, 지역 자치성이 있다
- 장기적 관점의 유지보수, 성능향상을 위한 비용이 절감된다
단점 :
- 여러 네트워크로 분리되어 있기 때문에 관리와 통제가 어렵다
- 데이터 무결성의 관리가 어려우며, 설계 관리가 복잡해 유지비용이 증가한다
- 다소 불규칙한 응답 속도 제공 가능성이 존재한다
- 분산 데이터베이스 적용 기법
1. 테이블 위치 분산 : 설계된 테이블을 본사와 지사 단위로 분산, 위치별 DB문서 필요
2. 테이블 분할 분산 : 각각의 테이블을 쪼개어 분산 (수평분할, 수직분할)
3. 테이블 복제 분산 : 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리 ( 부분복제, 광역복제)
4. 테이블 요약 분산 : 지역간에 데이터가 비슷하지만 다른 유형으로 존재하는 경우 (분석요약, 통합요약)
- 분산 데이터베이스 설계 고려 상황
1. 성능이 중요한 사이트
2. 공통코드나 마스터 데이터의 성능향상
3 .실시간 데이터 동기화가 요구되지 않으며, 지역별 실시간특징의 DB일 경우
4. 특정 서버에 부하가 집중되어 있는 경우
5. 백업 사이트를 구성하는 경우