Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 정보처리기사 실기
- 2020정보처리기사
- 기사시험
- ubuntu
- keyboards
- Python
- DEEPLEARNING
- 실기
- 파이토치
- 로지텍
- 자격증
- 국가자격증
- 코딩
- 정보처리기사
- 기사 실기
- 우분투
- qnet
- Apple
- pytorch
- 딥러닝
- NCS
- coding
- python3
- 실기시험
- torch
- Logitech
- 정보처리
- 큐넷
- 파이썬
- Anaconda
Archives
- Today
- Total
dhwiii's notepad | 딥 러닝, 코덱 일기장
(정보처리기사 실기 정리) 2-02. 물리 데이터 설계 본문
1. 반정규화 개념
- 반정규화 정의
: 정규화에 충실하여 모델링을 수행하면 종속성과 활용성은 향상되나, 수행속도가 증가하는 경우가 발생하기 때문에 기를 극복하기 위해 성능에 중점을 두어 정규화 하는 방법 - 특징
: 데이터 모델링 규칙에 얽매이지 않고 수행 / 시스템이 물리적으로 구현되었을 떄 성능 향상이 목적 - 사용시기
- 정규화에 충실하였으나 수행속도에 문제 발생
- 다량의 범위를 자주 처리
- 특정 범위의 데이터만 자주 처리
- 처리 범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
- 요약 자료만 주로 요구되는 경우
- 추가된 테이블의 처리를 위한 오버헤드를 고려
- 인덱스의 조정이나 부분 범위 처리로 유도하고, 클러스터링을 이용하여 해결할 수 있는지 검토 후 결정
2. 반정규화 유형
- 용도
유형 | 기법 | 용도 |
테이블 반정규화 | 테이블 병합 | 부분 처리가 두 개 이상의 테이블에 대해 항상 같이 일어나는 경우 |
테이블 분할 | 칼럼의 사용빈도 차리가 많은 경우 각각의 사용자가 각기 특정한 부분만 지속적으로 사용하는 경우 |
|
테이블 추가 | 다량의 범위를 자주 처리하는 경우 특정 범위의 데이터만 자주 처리되는 경우 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는경우 |
|
테이블 제거 | 테이블 재정의나 칼럼의 중복화로 더 이상 액세스 되지 않는 테이블이 발생할 경우 | |
Column 반정규화 | 중복 컬럼 추가 | 자주 사용되는 칼럼이 다른 테이블에 분산되어 있어 상세한 조건에도 불구하고 액세스 범위를 줄이지 못하는 경우 |
파생 컬럼 추가 | 대량 데이터에서 Row별 연산 결과를 얻고자 할 때 성능 향상을 위한 파생칼럼을 추가할 경우 | |
이력 컬럼 추가 | 대량 데이터 처리 시 불특정 일자 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하 예방 | |
PK에 의한 컬럼 추가 | 기본키의 형태가 적절하지 않거나 너무 많은 칼럼으로 구성된 경우 |
- 방법
유형 | 기법 | 방법 |
테이블 반정규화 | 테이블 병합 | 해당 테이블을 통합하여 설계 |
테이블 분할 | 수직 분할 : 칼럼별 사용빈도에 다라 분할 수평 분할 : 특정 범위별 사용 빈도의 차이가 많은 경우 해당 범위 별로 테이블을 분할 |
|
테이블 추가 | 집계 테이블 추가 : 활용하고자 하는 집계 정보를 위한 테이블 추가 진행 테이블 추가 특정 부분만을 포함하는 테이블 추가 |
|
테이블 제거 | 해당 테이블 삭제 | |
Column 반정규화 | 중복 컬럼 추가 | Join 성능 향상을 위해 중복 컬럼 추가 |
파생 컬럼 추가 | 계산된 값을 저장하는 파생 컬럼 추가 | |
이력 컬럼 추가 | 최근 값, 시작 일자 등의 컬럼 추가 | |
PK에 의한 컬럼 추가 | 복합PK의 일부를 일반 속성으로 추가 |
3. 물리적 모델링 수행 순서
- 단위 엔티티를 테이블로 변환
: 논리 모델에서 정의된 엔티티 -> 물리모델 테이블
논리적 설계 | 물리적 설계 | 데이터베이스 |
엔티티 (Entity) | 테이블 (Table) | Table |
속성 (Attribute) | 컬럼 (Column) | Column |
주 식별자 | Primary Key | Primary Key |
외래 식별자 | Foreign Key | Foreign Key |
- 속성을 칼럼으로 변환
: 논리 모델에서 정의된 속성 -> 물리모델 칼럼
Entity | 변환 -> |
Table |
속성 (Attribute) | 컬럼 (Column) | |
Primary UID | Primary Key | |
Secondary(Alternate) UID | Unique Key | |
String | Varchar | |
Integer | Number |
- 주 식별자를 기본키로 변환
: 논리 모델에서 정의된 주 식별자 -> 물리모델 기본키
- 주 식별자에 해당하는 모든 속성 : 기본키로 선언
- Not Null, Unique 등의 제약조건 추가 정의
- 관계에 의한 외래키가 기본키에 포함될 수 있음 - 관계를 외래키로 변환
: 논리모델에서 정의된 관계 -> 외래키로 변환
- 1:M -> Primary Key : Foreign Key 로 변환
- N:M -> 중간 테이블을 만들어서 N:1, 1:N 관계로 변환 - 칼럼 유형과 길이를 정의
: 정의된 각 칼럼에 대해 적용 DMBS에서 제공하는 데이터 유형 중 적절한 유형을 정의하고 해당 데이터의 최대 길이를 파악하여 길이를 설정 - 반정규화
- 중복 테이블 추가 : 집계 테이블 추가, 진행 테이블 추가, 특정 부분만을 포함하는 테이블 추가
- 테이블 조합 : 1:1 관계의 테이블 조합, 1:M 관계의 테이블 좋바, 슈퍼타입 서브타입 테이블 조합
- 테이블 분할 : 수직 분할, 수평 분할
- 테이블 제거 : 테이블 재정의 또는 칼럼의 중복화로 더 이상 액세스 되지 않는 테이블이 발생할 경우 제거
- 칼럼의 중복화 : 일반적으로 조인 프로세스를 줄이기 위해 칼럼의 중복을 허용
4. 테이블 제약 조건
- Delete Constraint
- Cascade : 참조한 테이블에 있는 외부키와 일치하는 모든 Row 삭제
- Restricted : 참조한 테이블에 있는 외부키에 없는 것만 삭제 가능
- Nullify : 참조한 테이블에 정의 된 외부키와 일치하는 것을 Null로 수정 - Update Constraint
- Cascade : 참조한 테이블에 있는 외부키와 일치하는 모든 Row 수정
- Restricted : 참조한 테이블에 있는 외부키에 없는 것만 수정 가능
- Nullify : 참조한 테이블에 정의된 외부키와 일치하는 것은 Null로 수정
5. 인덱스 설계
- 인덱스 적용 기준
- 인덱스 칼럼의 분포도가 10 ~ 15 % 인 경우
- 분포도가 범위 이상이더라도 부분처리를 목적으로 하는 경우
- 입출력 장표 등에서 조회 및 출력 조건으로 사용되는 칼럼인 경우 - 인덱스 컬럼 선정
- 분포도가 좋은 칼럼은 단독적으로 생성하여 활용도를 향상시킨다.
- 자주 조합되어 사용되는 칼럼은 결합 인덱스로 생성하여 활용
- 결합 인덱스는 구성되는 칼럼순서 선정에 유의
- 가능 한 한 수정이 빈번하지 않은 칼럼을 선정한다. - 설계 시 고려사항
- 새로 추가되는 인덱스가 기존 액세스 경로에 영향을 미칠 수 있음에 유의한다.
- 지나치게 많은 인덱스는 오버헤드로 작용한다.
- 인덱스는 추가적인 저장공간이 필요함을 고려해야 한다.
- 넓은 범위를 인덱스 처리 시 오히려 전체 처리보다 많은 오버헤드를 발생시킬 수 있다.
- 인덱스와 테이블 데이터의 저장 공간을 적절히 분리 될 수 있도록 설계해야 한다.
6. 뷰 설계
- 뷰 속성
- REPLACE : 뷰가 이미 존재하는 경우 재생성
- FORCE : 기본 테이블의 존재 여부에 관계없이 뷰 생성
- NOFORCE : 본 테이블이 존재할 때에만 뷰 생성
- WITH CHECK OPTION : Sub Query 내의 조건을 만족하는 행만 변경
- WITH READ ONLY : DML 작업 불가 - 뷰 설계 시 고려사항
- 최종적으로는 테이블을 액세스 하는 것이므로 사용에 따라 수행속도에 문제가 발생할 수 있음.
- 뷰 내의 SELECT문의 조건은 가능한 한 최적의 액세스 경로를 사용할 수 있도록 해야함
- 위 조건을 만족할 수 없다면, 뷰를 사용한 SQL의 WHERE절에서는 반드시 양호한 액세스 경로가 되도록 해야함
7. 클러스터 설계
- 적용 기준
- 분포도가 넓을수록 오히려 유리한 기법
- 액세스 효율 향상을 위한 물리적 저장 방법
- 분포도가 넓은 테이블의 클러스터링은 저장공간의 절약 가능
- 다중 블록 이상의 테이블에 적용 (일반적으로 6 블록)
- 대량의 범위를 자주 액세스 하는경우 적용
- 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용
- 여러 개의 테이블이 번번히 조인을 일으킬 떄 활용
- 반복 칼럼이 정규화에 의해 어쩔 수 없이 분할된 경우 활용 - 클러스터 설계 시 고려사항
- 검색 효율은 높여줌 / 입력, 수정, 삭제 시에는 부하가 증가
- Union, Distinct, Order by, Group by가 빈번한 칼럼이면 고려해야 함
- 수정이 자주 발생하지 않은 칼럼은 고려 대상
- 처리 범위가 넓어 문제가 발생하는경우 : 단일 테이블 클러스터링
- 조인이 많아 문제가 발생되는 경우 : 다중 테이블 클러스터링
8. 파티션 설계
- 파티션의 종류
- 범위분할(Range Partitioning) : 지정한 열의 값을 기준으로 분할
- 해시분할(Hash Partitioning) : 해시 함수에 따라 데이터를 분할
- 조합 분할(Composite Partitioning) : 범위 분할에 의해 데이터를 분할한 다음 해시 함수를 적용하여 다시 분할 - 장점
- 데이터 액세스 범위를 줄여 성능 향상
- 전체 데이터의 훼손 가능성 감소 및 데이터 가용성 향상
- 각 분할 영역을 독립적으로 백업 및 복구 가능
- Disk Striping으로 I/O성능 향상 - 파티셔닝 순서
파티션의 종류와 결정 -> 파티션 키의 선정 -> 파티션 수 결정
9. 디스크 구성 설계
- 구성 설계 방법
- 정확한 용량을 산정하여 디스크 사용의 효율을 높임
- 업무량이 집중되어 있는 디스크를 분리하여 설계함으로써 집중화 된 디크에 대한 입출력 부하를 분산한다.
- 입출력 경함을 최소화하여 데이터의 접근 성능을 향상시킨다.
- 테이블 객체를 위한 테이블 스페이스와 인덱스 객체를 위한 테이블 스페이스를 분리 구성한다.
- 테이블 스페이스와 템포러리 스페이스를 분리 구성한다.
- 테이블을 마스터 테이블과 트랜잭션 테이블로 분류한다.
- 시스템의 구성에 따라 테이블 스페이스의 개수와 사이즈 등을 결정한다.
- 파티션 할 테이블은 별도로 분류한다.
출처 : 이기적 정보처리기사 실기 핵심이론 1권
'■ 2020 정보처리기사 실기 > 1. 정보처리 실무' 카테고리의 다른 글
(정보처리기사 실기 정리) 2-01. 논리 데이터 모델 설계 (0) | 2020.10.26 |
---|---|
(정보처리기사 실기 정리) 1-03. 분석모델 확인하기 (0) | 2020.10.26 |
(정보처리기사 실기 정리) 1-02. 요구사항 확인 (0) | 2020.10.25 |
(정보처리기사 실기 정리) 1-01. 현행 시스템 분석 (0) | 2020.10.25 |
Comments