CHATPER01 | 데이터 모델링의 이해

rimmz·2022년 5월 22일
0

자격증 | SQLD

목록 보기
3/3
post-thumbnail

CHATPER01 | 데이터 모델링의 이해

2. 데이터 모델과 성능


📍 성능 데이터 모델링의 개념

분석/설계 단계부터 데이터베이스 성능을 고려한 데이터 모델링을 수행하는 기법

⭕ 성능 데이터 모델링의 절차

  • 정규화 : 데이터 중복을 제거하여 데이터 처리 성능을 향상
  • 용량산정 : 데이터베이스의 현재 용량과 예상 증가량을 조사
  • 트랜잭션 유형 파악 : 데이터의 분할 및 조인 여부 조사
  • 반정규화 : 테이블, 컬럼, 관계에 대해 반정규화 수행
  • 데이터 구조 조정 : 이력 유형, PK/FK 순서, 슈퍼타입/서브 타입 조정
  • 데이터 모델 검증 : 성능 관점에서 데이터 모델을 검증

📍 데이터베이스 정규화(DB Normalization)의 개념

데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상현상을 방지하고, 데이터의 일관성을 유지하기 위해 무손실 분해하는 과정

🔎 이상현상 릴레이션을 조작할 때 데이터가 불필요하게 중복되어 일관성이 유지되지 못하는 현상

📍 함수적 종속성(Functional Dependency)

  • 데이터가 가지고 있는 속성 간의 관계에 의해 결정되고 종속되는 현상
  • 데이터의 기준 값을 결정자(Determinant)라고 하고, 종속되는 값을 종속자(Dependent)라고 한다.
  • (결정자) -> (종속자)

⭕ 함수적 종속성의 유형

  • 부분 함수 종속성 : 복합식별자의 부분적인 속성이 일반 속성을 결정하는 상태
  • 완전 함수 종속성 : 식별자의 전체 속성이 일반 속성을 결정하는 상태
  • 이행 함수 종속성 : 식별자가 아닌 일반 속성이 다른 일반 속성을 결정하는 상태
  • 결정자 함수 종속성 : 후보키가 아닌 결정자가 존재하는 상태

⭕ 데이터 베이스 정규화 단계

  • 1차 정규화 : 테이블 내의 속성값을 원자값으로 구성하는 단계
  • 2차 정규화 : 부분 함수 종속성을 제거하는 단계
  • 3차 정규화 : 이행 함수 종속성을 제거하는 단계
  • BCNF(Boyce-Codd Normal Form) : 결정자 함수 종속성을 제거하는 단계

⭕ 데이터베이스 정규화의 성능 고려사항

  • 정규화를 하면 데이터 처리 조건에 따라 성능이 향상될 수도 있지만, 반대로 성능이 저하될 수도 있다.
  • 정규화로 인해 조인이 증가하는 경우에는 데이터 조회 성능이 저하될 수 있다.
  • 데이터 조회와 입력/수정/삭제 성능이 Trade-off되어 발생하기도 한다.

📍 반정규화(De-Normalization)의 개념

  • 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법이다.
  • 역정규화 또는 비정규화라고 부르기도 한다.

⭕ 반정규화 절차

대상을 조사하고, 다른방법을 먼저 유도한 후, 반정규화를 수행한다.

1. 반정규화 대상 조사

  • 범위처리 빈도수 조사 : 일정한 범위를 조회하는 프로세스가 많은지 확인
  • 대량의 범위처리 조사 : 대량의 데이터 범위를 자주 처리하는지 확인
  • 통계성 프로세스 조사 : 통계 정보를 필요로 하는 프로세스가 있는지 확인
  • 테이블 조인 개수 : 테이블에 조인의 개수가 많은지 확인

2. 다른 방법 유도

  • 뷰(View) 테이블 : 성능을 고려한 뷰를 생성
  • 클러스터링 적용 : 클러스터링 팩터에 의해 저장방식을 다르게 적용
  • 인덱스의 조정 : 인덱스 변경 및 생성
  • 응용 애플리케이션 : 응용 메모리 영역에서 데이터를 캐시 처리

3. 반정규화 적용

  • 테이블 반정규화 : 테이블 병합, 분할, 추가
  • 컬럼 반정규화 : 중복 컬럼, 파생 컬럼, 이력컬럼 추가
  • 관계 반정규화 : 중복 관계 추가

⭕ 반정규화 기법

테이블

  • 테이블 병합 : 1:1 관계, 1:M 관계, 슈퍼/서브 타입 테이블 병합
  • 테이블 분할 : 테이블을 수직 또는 수평으로 분할
  • 테이블 추가 : 중복, 통계(집계), 이력, 부분 테이블 추가

컬럼

  • 중복 컬럼 추가 : 조인을 감소시키기 위해 다수 테이블에 중복된 컬럼을 추가
  • 파생 컬럼 추가 : 계산에 의한 성능 부하를 예방하기 위해 미리 값을 게산한 컬럼을 추가
  • 이력 컬럼 추가 : 이력 데이터에서 최근 값을 조회하기 위한 기능성 컬럼을 추가
  • 임시 컬럼 추가 : 애플리케이션 오작동 시 이전 데이터로 복구하기 위한 임시 컬럼을 추가
  • 기본키에 의한 컬럼 추가 : 단일 속성인 PK가 복합 의미를 갖는 경우에 개별 의미를 일반 속성에 포함

관계

  • 중복관계 추가 : 여러 경로를 거쳐야 조인이 가능한 경우 추가적인 관계를 생성해서 성능을 향상

⭕ 반정규화의 성능 고려사항

중복성의 원리를 이용해서 데이터 조회성능을 향상시키는 역할을 한다.

📍 대용량 데이터의 성능 저하 원인

데이터의 양이 많은 경우

  • 데이터 양이 많아지면 인덱스의 용량이 커져서, 인덱스 변경이 필요한 입력, 수정, 삭제, 트랜잭션에서 성능 저하가 발생
  • 데이터 양의 증가로 인덱스의 Tree 구조가 커지면, 인덱스 단계가 깊어지면서 조회 성능도 저하됨

컬럼의 수가 많은 경우

  • 컬럼의 수가 많아지면 데이터가 다수 블록에 저장되므로, 다수의 I/O를 발생 시켜서 성능 저하가 발생
  • 로우체이닝(Row Chaining), 로우 마이그레이션(Row Migration) 현상 발생

🔎 로우 체이닝(Row Chaining) 하나의 로우가 다수의 블록에 저장되는 현상
🔎 로우 마이그레이션(Row Migration) 데이터에 대한 수정이 발생할 때, 기존 블록이 아닌 새로운 블록에 저장하는 현상

⭕ 대용량 데이터의 성능 향상 방법

파티셔닝 (Partitioning)

  • 하나의 테이블을 다수의 파티션(Partition)으로 분할하는 기법
  • 물리적인 파티셔닝을 통해 데이터를 파티션 단위로 관리
  • 부하를 각 파티션으로 분산시켜 성능을 향상

테이블 분할

  • 하나의 테이블을 다수의 테이블로 분할하는 기법
  • 테이블 분할을 통해서 I/O를 줄이고 성능을 향상

⭕ 파티셔닝(Partitioning)

대용량 테이블을 보다 작은 파티션으로 관리함으로써 성능 저하를 방지하고 데이터 관리를 용이하게 하는 기법

  • 레인지 파티셔닝 : 파티션 키 값의 범위를 기준으로 파티션을 구분하는 기법
  • 해시 파티셔닝 : 해시 함수의 값에 따라 파티션을 구분하는 파티셔닝 기법
  • 리스트 파티셔닝 : 파티션에 값 목록을 할당해서 파티션을 구분하는 기법
  • 컴포지트 파티셔닝 : 레인지 파티셔닝, 해시 파티셔닝, 리스트 파티셔닝 중 2개 이상의 파티셔닝을 결합하는 파티션 기법

⭕ 테이블 분할

하나의 테이블을 다수의 테이블로 분할하는 기법으로써 테이블 접근에 대한 I/O를 줄이고 성능을 향상시킨다.

  • 수평 분할 : 하나의 테이블을 다수의 테이블로 수평 분할하는 기법
  • 수직 분할 : 하나의 테이블을 다수의 테이블로 수직 분할하는 기법

📍 슈퍼타입과 서브타입 데이터 모델의 변환 방법

슈퍼타입과 서브타입 데이터 모델은 물리 모델링 단계에서 1:1 타입, 슈퍼+서브 타입, All in One 타입으로 변환할 수 있다.

  • 1:1 타입 (One to One Type) : 슈퍼타입과 서브타입 모델을 개별 테이블로 생성
  • 슈퍼+서브 타입 (Plus Type) : 슈퍼타입을 각 서브 타입에 통합하고, 서브 타입을 개별 테이블로 생성
  • All in One 타입 (Single Type) : 슈퍼타입과 서브 타입 모델을 하나의 테이블로 통합해서 생성

⭕ 슈퍼타입과 서브 타입 데이터 모델의 성능 고려사항

트랜잭션의 특성을 고려하지 않고 슈퍼타입과 서브 타입 데이터 모델을 변환하면 데이터베이스의 성능이 저하되는 문제가 발생한다.

개별 트랜잭션 발생

  • 슈퍼타입과 서브 타입 각각에 업무 트랜잭션이 독립적으로 발생하는 경우에는 1:1 타입으로 변환

슈퍼타입+서브 타입 트랜잭션 발생

  • 슈퍼타입과 서브 타입을 묶어서 트랜잭션이 발생하는 경우에는 슈퍼+서브 타입으로 변환

전체 트랜잭션 발생

  • 전체를 하나로 묶어 트랜잭션이 발생하는 경우에는 All in One 타입으로 변환

📍 기본키(PK), 외래키(FK) 성능 고려사항

기본키는 인덱스와 PK 컬럼 순서를 고려해야 하고, 외래키는 인덱스와 업무적 활용도를 고려해야 한다.

기본키(PK)

  • PK 제약조건을 구현하기 위해서 Unique 인덱스를 사용
  • Random Access를 위해 Unique 인덱스를 사용하면 데이터 조회 성능이 향상됨
  • 복합 컬럼으로 구성된 PK에서 등치조건(=)이나 범위조건(BETWEEN, <, >)을 사용하는 컬럼을 선두 컬럼으로 정해야 인덱스를 효율적으로 이용 가능
  • PK 컬럼 순서를 조정하지않으면, 데이터 조회 성능이 저하될 수 있음

외래키(FK)

  • FK 속성에 대해 인덱스를 생성하지 않으면, 데이터 조회 성능이 저하될 수 있음
  • FK 속성에 기본정책으로 인덱스를 생성하고, 업무적으로 자주 활용되지 않는 경우에 인덱스 삭제를 고려함

📍 분산 데이터베이스의 개념

  • 네트워크를 통해 물리적으로 분산된 데이터베이스를 하나의 논리적 데이터베이스로 사용하는 시스템
  • 다수의 지역으로 노드를 분산시켜 데이터베이스 성능을 향상
  • 분산 데이터베이스 구성으로 데이터 백업이 가능하지만, 데이터가 실시간으로 동기화되지는 않는다.

⭕ 분산 데이터 베이스의 투명성

  • 지역 사상 투명성 : 지역 DBMS와 물리적 DB 사이의 매핑을 보장하는 성질
  • 중복 투명성 : 데이터가 다수의 물리적인 공간에 중복을 저장되어 있는지 알 필요가 없는 성질
  • 분할 투명성 : 하나의 논리적 릴레이션이 다수의 단편으로 분할되어 저장되는 성질
  • 위치 투명성 : 데이터의 물리적인 위치를 명시할 필요가 없는 성질
  • 장애 투명성 : 지역 데이터베이스, 네트워크 장애가 발생하더라도 데이터 무결성을 보존하는 성질
  • 병행 투명성 : 다수의 트랜잭션을 수행해도 데이터의 일관성을 유지하는 성질

⭕ 분산 데이터베이스의 성능 고려사항

  • 원거리 서버에 접속할 때 발생하는 네트워크 부하와 트랜잭션 집중 현상은 기존 데이터 베이스의 성능 저하를 발생
  • 데이터를 분산 환경으로 구성하면 근거리 서버 접속이 가능해져 Global Single Instance(GSI)보다 더 빠른 성능을 제공

🔎 Global Single Instance(GSI) : 통합된 데이터베이스 구조를 의미하며, 분산 데이터베이스와는 대치 개념

profile
#의욕넘치는#💻#✨#FE#💪🏻

0개의 댓글