성능 데이터 모델링, 정규화, 반정규화, 대량 데이터, 데이터베이스 구조, 분산 데이터베이스, 트랜잭션, 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 사용백업 사이트 구성 시 간단하게 분산 기능 적용