[SQLD] 개념정리 1과목 - 데이터 모델과 성능

    정규화와 성능

    정규화

    정규화 = “데이터 분해 과정”

    : 데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위한 방법

    즉, 정해진 규칙에 따라 데이터를 이용하기 쉽게 만드는 것

    • 정규화 단계
      • 제 1 정규화 : 테이블 내 속성의 원자성을 확보한다, 기본키를 설정하는 단계
      • 제 2 정규화 : 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수 종속성을 제거한다 ⇒ 1개의 테이블에 모두 있던 것을 → 2개의 테이블로 분리시키는 것
      • 제 3 정규화 : 기본 키 제외 컬럼 간의 종속성을 제거한다 , 이행 함수 종속성 제거하는 단계
      • BCNF (Boyce-Codd Normal Form) : 강한 제 3 정규화, 결정자 함수의 종속성을 제거한다, 또한, 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해하는 단계
      • 제 4 정규화 : 여러 컬럼이 하나의 컬럼을 종속시키는 경우 분해 해 다중값 종속성을 제거한다.
      • 제 5 정규화 : 조인에 의한 종속성이 발생할 시 분해하는 단계
    • 정규화 주의사항 (출제**)
      • 모든 정규화는 이전 정규화를 만족해야 한다
      • 정규화 시 이상현상은 제거되지만, 테이블을 분해하는 과정이기에 조인이 많아지고 조회 성능이 저하될수 있다.
      • 단, 단일 테이블 조회 시 → 중복이 제거되기 때문에 조회 성능이 올라간다.

    ✔️ [KeyPoint]

    • 제1,2,3 정규화의 구분에 대해 자주 출제된다
    • 정규화의 주의사항 ⇒ 모든 정규화는 이전 정규화를 만족해야 하며, 단일 테이블 조회와 다중 테이블 조회 차이를 기억해두자!!
    • 즉, 정규화는 정해진 규칙에 의해 데이터를 이용하기 쉽게 테이블을 쪼개고, 중복을 최소화 시키는 방법이다.

    반정규화와 성능

    반정규화

    • 반정규화 의 동의어 = “역정규화” // ≠ 비정규화

    : 데이터베이스 성능향상 을 위해 데이터 중복을 허용하고, 조인을 줄이는 방법

    ⇒ 이는 성능(=조회 속도)은 향상 시킬 수 있지만, 데이터 모델의 유연성은 낮아진다.

    즉, 성능향상 및 단순화를 위해 정규화되어 있는 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법이다.

    [종류]

    1. 테이블의 반정규화
      1. 테이블 병합
        1. 1 : 1 관계 테이블 병합
        2. 1 : M 관계 테이블 병합
        3. 슈퍼 / 서브 타입 테이블 병합
      2. 테이블 분할
        1. 수직 분할
        2. 수평 분할
      3. 테이블 추가
        1. 중복 테이블 추가
        2. 통계 테이블 추가
        3. 이력 테이블 추가
        4. 부분 테이블 추가
    2. 칼럼의 반정규화
      1. 중복 컬럼 추가
      2. 파생 컬럼 추가
      3. 이력 테이블 컬럼 추가
      4. PK에 의한 컬럼 추가
      5. 응용 프로그램 오작동을 위한 컬럼 추가
    3. 관계의 반정규화
      1. 중복 관계 추가

    반정규화 절차 과정

    대상 조사 및 검토 → 다른 방법 검토 → 반정규화 수행

     

    ✔️ [KeyPoint]

    • 정규화와 비교해 반정규화가 무엇인지 구분할 줄 알기
    • 반정규화의 목적은 “성능향상” 및 단순화 이다
    • 반정규화의 기법 잘 알아두기

    대용량 데이터에 따른 성능

    1. 인덱스 활용

    • 인덱스 구축 : 데이터베이스에서 자주 사용되는 컬럼에 인덱스를 생성하여 검색 및 정렬 기능을 향상시킬 수 있음.
    • 복합 인덱스 : 여러 개의 컬럼을 조합하여 인덱스를 생성할 경우, 복합 인덱스를 통해 여러 조건에 대한 검색 기능을 개선할 수 있음.

    2. 파티셔닝 

    • 테이블 파티셔닝: 대용량 데이터를 논리적 또는 물리적으로 분할하여 관리함으로써 쿼리의 처리 속도를 향상시킬 수 있음.
    • 범위 파티셔닝: 특정 기준에 따라 데이터를 범위별로 나누어 여러 파티션에 저장하는 방식.
    • 해시 파티셔닝: 해시 함수를 이용하여 특정 컬럼 값을 해싱한 결과에 따라 데이터를 분할하는 방식.

    3. 쿼리 튜닝

    • 쿼리 최적화: 복잡한 쿼리를 단순화하거나 적절한 인덱스를 활용하여 실행 계획을 최적화함으로써 처리 성능을 향상시킬 수 있음.
    • 실행 계획 분석: 데이터베이스의 실행 계획을 분석하여 효율적인 인덱스 사용 여부 및 조인 순서 등을 확인하여 성능을 개선할 수 있음.

    4. 메모리 최적화

    • 버퍼 캐시 확보: 쿼리 실행 시 자주 사용되는 데이터를 메모리에 캐시하여 디스크 I/O를 줄여 처리 속도를 향상시킬 수 있음.
    • 메모리 테이블 사용: 대용량 데이터의 경우 메모리 테이블을 사용하여 디스크 I/O를 최소화하고 성능을 향상시킬 수 있음.

    5. 분산 처리 

    • 샤딩: 데이터를 여러 노드에 분산하여 저장하고 쿼리를 분할하여 병렬 처리함으로써 대용량 데이터의 처리 성능을 향상시킬 수 있음.
    • 클러스터링: 여러 대의 서버에 데이터베이스를 분산하여 처리 성능을 극대화할 수 있는 기술

    6. 스토리지 최적화

    • 압축기술 : 데이터를 압축하여 저장하고 필요 시 압축을 해제하여 사용함으로써 저장 공간을 절약하고 입출력 속도를 향상시킬 수 있
    • 분할 저장: 대용량 데이터를 여러 개의 파일로 분할하여 저장하고 필요시 필요한 파일만 로딩하여 처리함으로 성능을 향상시킬 수 있음

    DB 구조와 성능

    1. 중앙 집중형 DB : 현대의 물리적 시스템에 여러명의 사용자가 접속해서 사용하는 DB
    2. 분산 DB : 물리적으로 떨어져 있지만 네트워크로 연결된 단일 DB 이미지를 보여주고, 분산된 작업을 하는 DB

    분산 DB 데이터에 따른 성능

    • 분산 DB의 투명성
      • 분할 투명성
      • 위치 투명성
      • 지역 사상 투명성
      • 중복 투명성
      • 장애 투명성
      • 병행 투명성

    ⇒ 즉, 분산되어 있어도 위 부분들이 모두 서비스 시 이상이 없어야 한다!!

    • 분산 DB 설계 방식
      • 상향식 : 지역 스키마 작성 후 향후 전역 스키마를 작성해 분산 DB 구축
      • 하향식 : 전역 스키마 작성 후 해당 지역 사상 스키마를 작성해 분산 DB 구축
    • 분산 DB의 장/단점

    장점

    1. DB 신뢰성과 가용성이 높다
    2. 병렬 처리를 수행 해 속도가 빠르다
    3. 시스템 용량 확장이 쉽다

    단점

    1. 여러 네트워크를 사용해 관리 및 통제가 어렵다
    2. 보완 및 관리가 어렵다
    3. 데이터 무결성 관리가 어렵다
    4. DB 설계가 복잡하다

    댓글