데이터 입출력 구현 (2)

Chapter 02. 물리 데이터 저장소 설계


1. 물리 데이터 모델 설계

(1) 개념

물리 데이터 모델링은 논리모델을 적용하고자 하는 기술에 맞도록 상세화 해가는 과정

(2) 변환 절차

논리 데이터 저장소에서 물리 데이터 저장소로 변환하는 절차는 다음과 같다.

  1. 개체를 테이블로 변환
  2. 속성을 컬럼으로변환
  3. UID를 기본키로 변환
  4. 관계를 외래키로 변환
  5. 컬럼 유형과 길이 정의
  6. 반 정규화 수행

2. 물리 데이터 저장소 구성

(1) 테이블 제약조건 ( Constraint ) 설계

참조무결성 제약조건

  • 릴레이션과 릴레이션 사이에 대해 참조의 일관성을 보장하기 위한 조건
  • 2개의 릴레이션이 기본키, 외래키를 통해 참조 관계를 형성할 경우, 참조하는 외래키의 값은 항상 참조되는 릴레이션에 기본키로 존재해야 한다.
  • 제한 ( Restricted )
    RESTRICT
    참조 무결성 원칙을 위배하는 연산을 거절하는 옵션
  • 연쇄 ( Cascade )
    CASCADE
    참조되는 릴레이션에서 튜플을 삭제하고, 참조되는 릴레이션에서 이 튜플을 참조하는 튜플들도 함께 삭제하는 옵션
  • 널 값 ( Nullify )
    SET NULL
    참조되는 릴레이션에서 튜플을 삭제하고, 참조하는 릴레이션에서 해당 튜플을 참조하는 튜플들의 외래키에 NULL 값을 넣는 옵션
    릴레이션 정의할 때 참조하는 릴레이션에서 NULL 값이 들어갈 애트리뷰트에 NOT NULL 이라고 명시되어 있으면 삭제 연산 거절

참조무결성 제약조건 SQL 문법

ALTER TABLE 테이블 ADD
FOREIGN KEY ( 외래키 )
REFERENCES 참조테이블( 기본키 )
ON DELETE [ RESTRICT | CASCADE | SET NULL ];

(2) 인덱스 ( Index ) 설계

개념

  • 검색 연산 최적화를 위해 데이터베이스 내 열에 대한 정보를 구성한 데이터 구조
  • 신속한 조회 가능

인덱스 적용 기준

인덱스 분포도가 10~15% 이내인 경우 다음을 참고한다.

  • 분포도 = ( 1 / ( 컬럼값의 종류 ) ) x 100
  • 분포도 = ( 컬럼 값의 평균 Row 수 ) / ( 테이블의 총 Row 수 ) x 100
  • 분포도가 범위 이상이더라도 부분처리를 목적으로 하는 경우 적용
  • 조최 및 출력 조건으로 사용되는 컬럼인 경우 적용
  • 인덱스 자동생성 기본키와 Unique 키의 제약조건을 사용할 경우 적용

인덱스 컬럼 선정

  • 분포도가 좋은 컬럼은 단독적으로 생성
  • 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성
  • 결합 인덱스는 구성되는 컬럼 순서 선정( 사용빈도, 유일성, 정렬 등 )에 유의
  • 가능한 수정이 빈번하지 않는 컬럼 선정

고려사항

  • 지나치게 많은 인덱스는 오버헤드( Overhead )로 작용
  • 인덱스는 추가적인 저장 공간이 필요

(3) 뷰 ( View ) 설계

속성

  • REPLACE : 뷰가 이미 존재하는 경우 재생성
  • FORCE : 본 테이블의 존재 여부에 돤계 없이 뷰 생성
  • NOFORCE : 기본 테이블이 존재할 때 뷰 생성
  • WITH CHECK OPTION : 서브 쿼리 내의 조건을 만족하는 행만 변경
  • WITH READ ONLY : 데이터 조작어 작업 불가

고려사항

  • 뷰사용에 따라 수행속도 문제가 발생할 수 있다.
  • 뷰의 조건은 최적의 엑세스 경로를 사용할 수 있도록 한다.

(4) 클러스터 ( Cluster ) 설계

적용 기준

  • 인덱스의 단점 해결, 분포도가 넓을수록 유리하다.
  • 액세스 기법 x, 액세스 효율 향상을 위한 물리적 저장 방법
  • 분포도가 넓은 클러스터링은 저장 공간의 절약 가능
  • 대량의 범위를 자주 액세스하는 경우 적용
  • 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용
  • 여러 개의 테이블이 빈번하게 조인을 일으킬 때 활용

고려사항

  • 검색 효율을 높여주나, 입력/수정/삭제 시 부하 증가
  • UNION/DISTINCT/ORDER BY/GROUP BY가 빈번하면 검토 대상 컬럼
  • 수정이 자주 발생하지 않으면 검토 대상 컬럼
  • 처리 범위가 넓어 문제가 발생하는 경우는 "단일 테이블 클러스터링" 고려
  • 조인이 많아 문제가 발생되는 경우 "다중 테이블 클러스터링" 고려

(5) 파티션 ( Partition ) 설계

종류

  • 레인지 파티셔닝 ( Range Partitioning )
    -  연속적인 숫자나 날짜를 기준으로 하는 파티셔닝 기법
    -  손쉬운 관리 기법 제공, 관리 시간 단축
  • 해시 파티셔닝 ( Hash Partitioning )
    -  파티션 키의 해시 함수 값에 의한 파티셔닝 기법
    -  균등한 데이터 분할 가능, 질의 성능 향상
  • 리스트 파티셔닝 ( List Partitioning )
    -  특정 파티션에 저장될 데이터에 대한 명시적 제어가 가능한 파티셔닝 기법
    -  분포도가 비슷하고 데이터가 많은 SQL에서 컬럼의 조건이 많이 들어오는 경우 유용
  • 컴포지트 파티셔닝 ( Composite Partitioning )
    -  레인지 파티셔닝 / 해시 파티셔닝 / 리스트 파티셔닝 중 2개 이상을 결합한 파티셔닝 기법
    -  큰 파티션에 대한 I/O 요청을 여러 파티션으로 분산 가능

장점

  • 성능 향사
  • 가용성 향상
  • 백업 기능
  • 경합 감소

(6) 디스크 ( Disk ) 구성 설계

  • 정확한 용량 산정하여 디스크 사용 효율을 높임
  • 업무량이 집중된 디스크를 분리하여 설계
  • 입출력 경합을 최소화하여 데이터의 접근 성능 향상
  • 디스크 구성에 따라 테이블스페이스 개수와 사이즈 등 결정
  • 파티션 수행 테이블은 별도로 분류

좋은 웹페이지 즐겨찾기