본문 바로가기

Data Architecture

반정규화 - 물리 데이터 모델링

 

테이블 분할

 

1) 수평 분할

- 개념 : 레코드를 기준으로 분할, 파티션

- 사용 의의

(1) 하나의 테이블에 데이터가 많고, 레코드 중에서 특정 범위만을 주로 액세스 하는 경우 사용

(2) 분할된  테이블은 서로 다른 디스크에 위치시켜 물리적인 디스크의 효용성 극대화 가능

(3) DBMS 차원에서 제공

(4) 대표적인 방법은 범위 분할, 해쉬 분할, 복합 분할 기법

 

 

2) 수직 분할

- 개념

(1) 하나의 테이블이 가지는 컬럼의 수가 많아 분할

(2) 조회 위주의 컬럼과 갱신 위주의 컬럼으로 나뉘는 경우 -> Locking 문제

(3) 특별히 자주 조회되는 컬럼이 있는 경우

(4) 특정 컬럼의 크기가 아주  경우 (LOB Type)

(5) 특정 컬럼에 보안을 적용해야하는 경우

 

 

 

중복 테이블 생성

 

 

1) 개념 : 집계 테이블 경우 중복

 

 

2) 중복 테이블 생성 판단 근거

- 수행 속도 증가 

- 많은 범위를 자주 처리해야 하는 경우

- 특정 범위만 자주 처리되는 경우

- 처리 범위를 줄이지 않고는 수행속도를 개선할  없는 경우

- 요약 자료만 주로 요구되는 경우

- 추가된 테이블의 처리를 위한 오버헤드를 고려하여 결정

- 인덱스의 조정이나 부분범위 처리 또는, 클러스터링 활용 등을 검토한  결정

- 위의 상황에서는 논리 데이터 모델에는 존재하지 않지만, 물리 데이터 모델에서 중복 테이블을 추가하여 생성 가능

 

 

 

3) 중복 테이블 유형

 

 

- 집계(통계) 테이블

(1) 집계 테이블 유형 : 단일 테이블의 Group by, 여러 테이블의 조인 Group by

 

 

(2) 중복 테이블 생성  유의 사항

- 로우 수와 활용도를 분석하고, 시뮬레이션을 통해서  효용성에 대한 면밀한 검토가 선행돼야 한다.

- 집계 테이블에 단일 테이블 클러스터링을 한다면 집계 레벨을   낮춰 활용도를 높일  있는  검토 필요

- 클러스터링, 결합 인덱스, 고급 SQL을 집계테이블 대신 활용 여부 사전 검토

- 지나친 집계 테이블을 만들지 않는 것이 좋다

- 추가된 집계 테이블을 기존 응용 프로그램이 이용할  있는지를 찾아 보정시키는 노력이 필요하다.

- 데이터베이스 트리거의 오버헤드에 주의, 데이터의 일관성 보장에 유의

-> 집계 테이블과 원본 데이터는 일관성 유지가 매우 중요

 

 

(3) 진행 테이블 추가

진행 테이블 추가 상황

- 여러 테이블의 조인이 빈번히 발생하며 처리 범위도 넓은 경우

- M:M 관계가 포함된 처리의 과정을 추적, 관리하는 경우

- 검색 조건이 여러 테이블에 걸쳐 다양하게 사용되며 복잡하고 처리량이 많은 경우

 

 

진행 테이블 생성  유의 사항

- 데이터량이 적절하고 활용도가 좋아지도록 기본키를 선정

- 필요에 따라 적절한 추출 컬럼을 추가하여 집계 테이블의 역할도 하는 다목적 테이블 구상

- 다중 테이블 클러스터링이나 조인 SQL을 적절히 이용하면 굳이 진행테이블을 만들지 않아도 양호한 수행속도를   있는 경우가 많다.

 

 

 

중복 컬럼 생성

 

 

1) 개념

- 논리모델 : 정규화 과정을 통해 중복 제거 -> 일관성 확보

- 물리모델 : 성능을 위한 반정규화, 중복 허용

 

 

2) 중복 컬럼 생성 상황

- 빈번하게 조인을 일으키는 컬럼에 대해 고려

- 조인의 범위가 다량인 경우를 온라인화 해야하는 경우

- 액세스의 조건으로 자주 사용되는 컬럼

- 빈번히 사용되는 액세스 조건이 다른 테이블에 분산되어 있어 상세한 조건에도 불구하고 액세스 범위를 줄이지 못하는 경우, 자주 사용되는 조건들을 하나의 테이블로 모아서 조건의 변별성을 극대화할  있다.

- 복사된 컬럼의 도메인은 원본 컬럼과 동일해야 한다 -> 데이터 일관성(필수 사항)

- 접근 경로의 단축을 위해서 부모 테이블의 컬럼을 자식 테이블에 중복

- 상위 레벨의 테이블에 집계된 컬럼을 추가할  있다 -> 집계 컬럼 추가

- 하위 레벨의 테이블로 중복 컬럼을 복사할  있다.

- 연산된 결과를 주로 사용하는 경우에도 미리 연산을 하여 중복 컬럼 생성

- 여러 개의 로우로 구성된 값을 하나의 로우에 나열하는 경우

- 기본키의 컬럼이 길거나 여러 개의 컬럼으로 구성되어 있는 경우 인위적인 기본키를 추가할  있다.

 

 

3) 중복 컬럼 생성  유의 사항

- 다중 테이블 클러스터링으로 해결할  있는지 검토

- SQL Group 함수 이용하여 처리할  있는지 검토

- 저장 공간의 지나친 낭비를 고려하여 적절한 대비책 마련

- 반복 컬럼은 특별한 경우를 제외하고는 절대 사용할 필요가 없고, 있다면 sum(decode..) 용법과 같은 SQL 기법을 활용하여 이러한 부분을 피할  있도록 한다.

- 데이터의 일관성 보장에 유의해야 한다.

- 컬럼의 중복이 지나치게 심하면 데이터 처리의 오버헤드가 발생하게 된다.

- 사용자나 프로그램은 반드시 원본 컬럼만 수정하는 것이 바람직하다.

- 많은 중복 컬럼을 생성하고 있는 것이 현실이나 가능하면 중복 컬럼을 적게 가져가는 것이 바람직하다.

- 클러스터링, 결합 인덱스, 적절한 SQL을 이용하면 특별한 경우를 제외하고는 거의 해결 가능하기 때문에 이부분을 먼저 적극적으로 고려해보는 것이 바람직하다.

- 중복 컬럼을 이용하면 손쉽게 액세스 효율을 개선할  있으나, 지나친 중복화는 반드시 데이터 일관성 오류 발생의 개연성 증가  데이터 처리 오버헤드 증가라는 반대 급부가 있다는 것을 고려해야 한다.

- 조인, 서브쿼리 액세르 경로의 최적화 방안을 보다 철저히 간구해야한다.

 

'Data Architecture' 카테고리의 다른 글

논리 - 물리 모델 변환  (0) 2021.04.05
물리 데이터 모델링  (0) 2021.04.05
엔터티 상세화 - 논리 데이터 모델  (0) 2021.04.05
속성 정의 - 논리 데이터 모델  (0) 2021.04.05
논리 데이터 모델링 이해  (0) 2021.04.05