정규화와 성능
정규화
정규화 = “데이터 분해 과정”
: 데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위한 방법
즉, 정해진 규칙에 따라 데이터를 이용하기 쉽게 만드는 것
- 정규화 단계
- 제 1 정규화 : 테이블 내 속성의 원자성을 확보한다, 기본키를 설정하는 단계
- 제 2 정규화 : 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수 종속성을 제거한다 ⇒ 1개의 테이블에 모두 있던 것을 → 2개의 테이블로 분리시키는 것
- 제 3 정규화 : 기본 키 제외 컬럼 간의 종속성을 제거한다 , 이행 함수 종속성 제거하는 단계
- BCNF (Boyce-Codd Normal Form) : 강한 제 3 정규화, 결정자 함수의 종속성을 제거한다, 또한, 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해하는 단계
- 제 4 정규화 : 여러 컬럼이 하나의 컬럼을 종속시키는 경우 분해 해 다중값 종속성을 제거한다.
- 제 5 정규화 : 조인에 의한 종속성이 발생할 시 분해하는 단계
- 정규화 주의사항 (출제**)
- 모든 정규화는 이전 정규화를 만족해야 한다
- 정규화 시 이상현상은 제거되지만, 테이블을 분해하는 과정이기에 조인이 많아지고 조회 성능이 저하될수 있다.
- 단, 단일 테이블 조회 시 → 중복이 제거되기 때문에 조회 성능이 올라간다.
✔️ [KeyPoint]
- 제1,2,3 정규화의 구분에 대해 자주 출제된다
- 정규화의 주의사항 ⇒ 모든 정규화는 이전 정규화를 만족해야 하며, 단일 테이블 조회와 다중 테이블 조회 차이를 기억해두자!!
- 즉, 정규화는 정해진 규칙에 의해 데이터를 이용하기 쉽게 테이블을 쪼개고, 중복을 최소화 시키는 방법이다.
반정규화와 성능
반정규화
- 반정규화 의 동의어 = “역정규화” // ≠ 비정규화
: 데이터베이스 성능향상 을 위해 데이터 중복을 허용하고, 조인을 줄이는 방법
⇒ 이는 성능(=조회 속도)은 향상 시킬 수 있지만, 데이터 모델의 유연성은 낮아진다.
즉, 성능향상 및 단순화를 위해 정규화되어 있는 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법이다.
[종류]
- 테이블의 반정규화
- 테이블 병합
- 1 : 1 관계 테이블 병합
- 1 : M 관계 테이블 병합
- 슈퍼 / 서브 타입 테이블 병합
- 테이블 분할
- 수직 분할
- 수평 분할
- 테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
- 테이블 병합
- 칼럼의 반정규화
- 중복 컬럼 추가
- 파생 컬럼 추가
- 이력 테이블 컬럼 추가
- PK에 의한 컬럼 추가
- 응용 프로그램 오작동을 위한 컬럼 추가
- 관계의 반정규화
- 중복 관계 추가
반정규화 절차 과정
대상 조사 및 검토 → 다른 방법 검토 → 반정규화 수행
✔️ [KeyPoint]
- 정규화와 비교해 반정규화가 무엇인지 구분할 줄 알기
- 반정규화의 목적은 “성능향상” 및 단순화 이다
- 반정규화의 기법 잘 알아두기
대용량 데이터에 따른 성능
1. 인덱스 활용
- 인덱스 구축 : 데이터베이스에서 자주 사용되는 컬럼에 인덱스를 생성하여 검색 및 정렬 기능을 향상시킬 수 있음.
- 복합 인덱스 : 여러 개의 컬럼을 조합하여 인덱스를 생성할 경우, 복합 인덱스를 통해 여러 조건에 대한 검색 기능을 개선할 수 있음.
2. 파티셔닝
- 테이블 파티셔닝: 대용량 데이터를 논리적 또는 물리적으로 분할하여 관리함으로써 쿼리의 처리 속도를 향상시킬 수 있음.
- 범위 파티셔닝: 특정 기준에 따라 데이터를 범위별로 나누어 여러 파티션에 저장하는 방식.
- 해시 파티셔닝: 해시 함수를 이용하여 특정 컬럼 값을 해싱한 결과에 따라 데이터를 분할하는 방식.
3. 쿼리 튜닝
- 쿼리 최적화: 복잡한 쿼리를 단순화하거나 적절한 인덱스를 활용하여 실행 계획을 최적화함으로써 처리 성능을 향상시킬 수 있음.
- 실행 계획 분석: 데이터베이스의 실행 계획을 분석하여 효율적인 인덱스 사용 여부 및 조인 순서 등을 확인하여 성능을 개선할 수 있음.
4. 메모리 최적화
- 버퍼 캐시 확보: 쿼리 실행 시 자주 사용되는 데이터를 메모리에 캐시하여 디스크 I/O를 줄여 처리 속도를 향상시킬 수 있음.
- 메모리 테이블 사용: 대용량 데이터의 경우 메모리 테이블을 사용하여 디스크 I/O를 최소화하고 성능을 향상시킬 수 있음.
5. 분산 처리
- 샤딩: 데이터를 여러 노드에 분산하여 저장하고 쿼리를 분할하여 병렬 처리함으로써 대용량 데이터의 처리 성능을 향상시킬 수 있음.
- 클러스터링: 여러 대의 서버에 데이터베이스를 분산하여 처리 성능을 극대화할 수 있는 기술
6. 스토리지 최적화
- 압축기술 : 데이터를 압축하여 저장하고 필요 시 압축을 해제하여 사용함으로써 저장 공간을 절약하고 입출력 속도를 향상시킬 수 있
- 분할 저장: 대용량 데이터를 여러 개의 파일로 분할하여 저장하고 필요시 필요한 파일만 로딩하여 처리함으로 성능을 향상시킬 수 있음
DB 구조와 성능
- 중앙 집중형 DB : 현대의 물리적 시스템에 여러명의 사용자가 접속해서 사용하는 DB
- 분산 DB : 물리적으로 떨어져 있지만 네트워크로 연결된 단일 DB 이미지를 보여주고, 분산된 작업을 하는 DB
분산 DB 데이터에 따른 성능
- 분산 DB의 투명성
- 분할 투명성
- 위치 투명성
- 지역 사상 투명성
- 중복 투명성
- 장애 투명성
- 병행 투명성
⇒ 즉, 분산되어 있어도 위 부분들이 모두 서비스 시 이상이 없어야 한다!!
- 분산 DB 설계 방식
- 상향식 : 지역 스키마 작성 후 향후 전역 스키마를 작성해 분산 DB 구축
- 하향식 : 전역 스키마 작성 후 해당 지역 사상 스키마를 작성해 분산 DB 구축
- 분산 DB의 장/단점
장점
- DB 신뢰성과 가용성이 높다
- 병렬 처리를 수행 해 속도가 빠르다
- 시스템 용량 확장이 쉽다
단점
- 여러 네트워크를 사용해 관리 및 통제가 어렵다
- 보완 및 관리가 어렵다
- 데이터 무결성 관리가 어렵다
- DB 설계가 복잡하다
'자격증 > SQLD' 카테고리의 다른 글
[자격증] 2024 첫 개정 SQLD 자격증 취득!! / 52회 문과생,비전공자, 노베 원패스 후기 (2) | 2024.04.14 |
---|---|
[SQLD] 개념정리 2과목 - SQL 최적화 기본 원리 (0) | 2024.02.24 |
[SQLD] 개념정리 2과목 - SQL 활용 (0) | 2024.02.23 |
[SQLD] 개념정리 2과목 - SQL기본 (0) | 2024.02.22 |
[SQLD] 개념정리 1과목 - 데이터 모델의 이해 (0) | 2024.02.20 |
댓글