성능 데이터 모델링, 정규화, 반정규화, 대량 데이터, 데이터베이스 구조, 분산 데이터베이스, 트랜잭션, NULL에 대해 알아보자!
성능 데이터 모델링
: 데이터베이스의 성능을 향상
시키기 위해 설계 단계
부터 성능
과 관련된 사항들이 모델링에 반영
될 수 있다.
ex) 정규화, 반정규화, 테이블 통합, 테이블 분할 등
빠를
수록 성능저하
에 따른 성능개선비용
증가성능을 튜닝
하면서 변경될 수 있는 특징
분석/설계
단계에서 성능
을 고려한 데이터모델링 수행 시, 성능 저하에 따른 Rework
비용을 최소화
가능정규화
수행용량
및 트랜잭션 유형
을 파악하여 성능 저하
일으키는 부분 검토 (용량 산정
: 트랜잭션 유형
과 양
분석 자료가 됨)용량
과 트랜잭션
에 맞게 반정규화
수행성능 향상
을 위한 이력모델 조정
, PK/FK조정(인덱스 반영, 칼럼 순서 조정, FK 인덱스 생성)
, 슈퍼/서브타입 조정
수행(물리적인 데이터 모델링 시)FK컬럼
에도 별도의 인덱스
필요FK제약조건 생성
을 생략
하는 경우에도 데이터의 조인관계
가 필요
하므로 FK에 인덱스 생성
필요성능 검증
정규화(Normalization)
: 데이터 정합성
(정확성+일관성 유지, 보장)을 위해 엔터티를 작은 단위로 분리
하는 과정
입력, 수정, 삭제
성능 향상
조회
성능 저하
발생 가능중복성 제거
엔터티 증가
무결성
보장모든 속성
은 반드시 하나의 값
만 가져야 한다.주소
가 시,동,상세주소 등으로 나뉘는 걸 한 속성에 저장하면 안됨.다중값
을 가질 때, 어플리케이션에서 데이터를 꺼낼 때마다 split
을 사용해야 하는 번거로움 발생유사한 속성이 반복
되는 경우도 1차 정규화 대상
dang
포토폴리오 사이트를 사이트1, 사이트2, 사이트3으로 저장하기 보단, 각각의 사람에 대한 사이트 테이블을 생성하는 것이 효과적.1차 정규화
속성값이 하나
가 되도록 엔터티 분리유사한 속성
이 반복되지 않도
록 엔터티 분리모든 일반속성
은 반드시 모든 주식별자에 종속
되어야 한다.주식별자가 단일식별자
가 아닌 복합식별자
인 경우, 일반속성
이 주식별자의 일부
에만 종속
될 수 있는데, 이 경우 문제 발생.
위의 음료명
일반 속성은, 주식별자(주문번호, 음료코드) 중 음료코드
에만 종속되어있다.
2차 정규화
주식별자에 대한 부분종속
이 없도록 엔터티 분리주식별자가 아닌 모든 속성
간에는 서로 종속될 수 없다
. 일반속성
인 소속사명
이 다른 일반속성인 소속사코드
에 종속되어있다.
(이행함수종속
)
3차 정규화
일반속성에 종속
되지 않도록 엔터티
를 분리한다.다중값 종속성
제거
지나친 정규화
는 오히려 성능 저하
삽입 이상
: 불필요한 정보를 함께 저장
하지 않고서는 어떤 정보를 저장하는 것이 불가능삭제 이상
: 필요한 정보를 함께 삭제
하지 않고서는 어떤 정보를 삭제하는 것이 불가능 (삭제되면 안되는 데이터까지 덩달아 삭제)갱신 이상
: 중복된 데이터 중에 일부만 갱신
할 시 데이터의 불일치
가 발생반정규화(De-Normalization)
: 데이터의 조회 성능 향상
을 위해 데이터의 중복을 허용
하거나 데이터를 그룹핑하는 과정
정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상
과 개발, 운영의 단순화
를 위해 중복, 통합, 분리
등을 수행하는 데이터 모델링 기법.
=> 데이터를 조회할 때 디스크 I/O
량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인
으로 인한 성능 저하가 예상되거나 컬럼 계산
시 성능이 저하될 것을 예상하여 반정규화
조회
성능 향상
입력, 수정, 삭제
성능 저하
데이터 정합(정확+일관)성 이슈
발생정규화 끝난 후
거치게 되며 룰
존재데이터 무결성
저해모델링의 마지막 단계
에서 성능향상을 목적으로 반정규화런타임
에 컬럼 계산으로 속도 저하 우려 시 반정규화재현의 적시성
으로 판단1.테이블 병합
JOIN
이 필요한 경우가 많아, 테이블 통합
이 성능 측면에서 유리할 경우 고려
1:M 관계 테이블 병합
의 경우, 1
쪽에 해당하는 엔터티의 속성 개수가 많
으면 병합 시 중복데이터가 많아지
므로 테이블 병합에 적절 X
테이블의 관계가 강결합
이어서 같이 조회되는 경우가 대부분일 경우, 비정규화 고려
1:1 관계
테이블 병합 : 부작용 적
고 판단 수월1:M 관계
테이블 병합 : 1쪽에 해당하는 테이블 속성 수 적어
야 유리중복된 데이터 생김
). M기준 병합슈퍼 서브 타입
테이블 병합공통 속성 조회 빈도
가 개별 속성 조회 빈도수보다 높을 때 공통 속성
과 개별 속성
을 분리하여 슈퍼-서브 타입으로 설계.2.테이블 분할
테이블 수직 분할(속성 분할)
: 엔터티의 일부 속성
을 별도의 엔터티로 분할
(1:1 관계 성립
)
자주 사용하는 속성이 아니
거나 대부분의 인스턴스가 해당 속성값을 NULL
로 갖고 있을 때 고려(속성 사용 빈도 or null 여부)
수직 분할 시 한개의 블록
에 더 많은 인스턴스
를 저장할 수 있게 됨
ex)회원의 배우자명, 배우자 핸드폰 번호
는 별도의 엔터티로 분할
테이블 수평 분할(인스턴스 분할, 파티셔닝)
: 엔터티의 인스턴스
를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)
수평 분할 시 관계가 없는 다수의 테이블
이 생성
파티셔닝 기법
이용
ex) 배달(2022), 배달(2023)
는 파티션 기능을 이용해 배달일자
에 따라 물리적으로 데이터를 분리.
3.테이블 추가
중복
테이블 추가 : 데이터의 중복을 감안
하더라도 성능상 반드시 필요하다고 판단 시 별도의 엔터티 추가
통계
테이블 추가이력
테이블 추가부분
테이블 추가=>단순히 같은 데이터를 여러 테이블 저장
시 데이터 정합성에 위배
1.중복 컬럼
추가
JOIN이 필요한 경우
가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우2.파생 컬럼
추가
부하가 염려되는 계산값
을 미리 컬럼으로 추가하여 보관하는 방식3.이력 테이블 컬럼
추가
대량의 이력 테이블
을 조회할 때 속도가 느려
질 것을 대비하여 조회 기준
이 될 것으로 판단되는 컬럼을 미리 추가4.PK에 의한 컬럼
추가
5.응용시스템 오작동을 위한 칼럼
추가
JOIN이 필요한 경우
가 많아 중복 관계
를 추가하는 것이 성능 측면에 유리할 경우데이터 무결성을 깨뜨릴 위험성 없이
데이터 처리 성능 향상 가능1.반정규화 대상
조사
범위처리
빈도수 조사대량의 범위
처리 조사통계성
프로세스 조사테이블 조인
개수2.다른 방법유도
검토
뷰
테이블 : 지나치게 많은 조인
이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우클러스터링
적용 : 대량의 데이터 처리
나 부분
처리에 의해 성능이 저하되는 경우 클러스터링을 적용인덱스
조정 : 대량의 데이터 처리
나 부분
처리에 의해 성능이 저하되는 경우 인덱스 조정파티셔닝 기법
적용 : 대량의 데이터
는 PK의 성격
에 따라 부분적인 테이블
로 분리할 수 있다.파티셔닝
: 하나의 테이블에 많은 양의 데이터가 저장되면, 인덱스를 추가하고 테이블을 몇 개로 쪼개도, 성능이 저하되는 경우가 있다. 이때 물리적으로는 여러 개의 테이블로 분리
하고, 논리적으로는 하나의 테이블
로 하여 데이터 액세스 성능도 향상
시키고, 데이터 관리 방법도 개선
할 수 있도록 테이블에 적용하는 기법응용애플리케이션
: 로직 구사 방법
을 변경3.반정규화
적용
테이블
반정규화속성
반정규회관계
반정규화개별
로 발생되는 트랜잭션은 개별 테이블
--One To One Type
: 슈퍼타입/서브타입 개별 테이블 도출.
테이블의 수가 많아 조인이 많이 발생, 관리 어려움
슈퍼+서브
타입 발생 트랜잭션은 슈퍼+서브
타입 테이블로 구성
--Plus Type
: 슈퍼타입/서브타입 테이블로 도출.
조인이 발생하고 관리가 어려움
전체를 하나로 묶어
트랜잭션이 발생할 경우 하나의 테이블
로 구성
--Single Type
: 슈퍼타입과 서브타입을 하나의 테이블로 도출.
조인 성능이 좋고 관리가 편하지만, IO성능 나쁨
트랜잭션(transaction)
: 데이터를 조작하기 위한 하나의 논리적인 작업 단위
표현 가능
데이터
는 트랜잭션 범위
로 묶일 수 있음하나의 커밋 단위
로 묶어야 함NULL
: 존재하지 않음. 값을 모름
Oracle
: ''
를 null
로 인식SQL Server
: ''
를 공백문자
로 인식로우체이닝(한 행의 데이터 크기가 블록 데이터 저장 공간보다 클 때 발생)
발생할 정도로, 한 테이블에 많은 컬럼 존재시, 조회 성능 저하
발생.트랜잭션이 접근하는 컬럼 유형
을 분석하여 1:1(자주 접근하는 컬럼들과 상대적으로 접근 빈도가 낮은 컬럼들)로 테이블을 분리
하면 디스크 I/O
가 줄어들어 조회 성능 향상+) 로우 마이그레이션
: 데이터가 블록의 빈 공간에 들어갈 수 없을 정도로 커진 경우. 로우 마이그레이션 발생 시 변경으로 인해 증가된 데이터 뿐만 아니라 전체 행의 데이터가 다른 블록으로 복사됨. 즉, 해당 위치를 갖고 있는 인덱스 등을 변경해야 함
PK순서 결정 기준
은 인덱스 정렬구조를 이해한 상태에서 인덱스
를 효율적으로 이용할 수 있도록 PK순서 지정
필요.
여러개의 속성
이 하나의 인덱스
로 구성된 경우, 앞쪽에 위치
한 속성의 값이 비교자
로 있어야 좋은 효율앞쪽에 위치한 속성 값
이 가급적 =
아니면 최소한의 범위 Between
, <>
가 들어와야 인덱스 이용 가능<->GSI(Global Single Instance) : 통합 데이터베이스, 분산 DB와 대치
1.장점
지역 자치성
, 점증적 시스템 용량 확장
신뢰성
, 가용성
효용성
, 융통성
빠른 응답 속도
와 통신비용 절감
데이터의 가용성
과 신뢰성
증가시스템 규모
의 적절한 조절
각 지역 사용자
의 요구 수용
증대2.단점
개발 비용
오류
의 잠재성
증대처리 비용
증대설계, 관리
의 복잡성
과 비용
불규칙한 응답
속도통제 어려움
데이터 무결성 위협
공통코드, 기준정보
등 마스터 데이터
는 분산 데이터베이스에 복제 분산
적용한 곳에
두고 운영 시 원격지에서의 접근이 빈번
할 수록 실시간 업무처리
에 대해 좋은 성능을 얻기가 어려움
)실시간
업무적인 특성 가질 경우 분산 DB 사용백업 사이트
구성 시 간단하게 분산 기능 적용