jeongwon
[데이터베이스 모델링] 물리적 데이터베이스 모델링 본문
선택한 데이터베이스에 맞는 물리적 표를 만드는 단계.
이 단계에서 중요한 것은 성능이다. 성능 향상에 대한 고민이 필요하다.
데이터가 많아짐에 따라 생기는 병목 지점을 찾고(find slow query) 해결책을 찾는 일.
최후의 보루는 이상적으로 정규화 된 표에 손을 대는 일, 즉 역정규화 / 반정규화 이다.
1. index
우선 고려해볼 만한 것. 행에 대한 읽기 성능을 향상시키지만, 쓰기 성능을 떨어뜨린다.
쓰기를 할 때마다 기존의 인덱스에 관한 정리정돈의 연산과정이 필요하다.
시간, 저장공간 문제가 발생한다.
그럼에도 정리정돈을 잘하는 만큼 비약적으로 읽기 성능을 향상시킨다.
2. cache
데이터베이스를 이용하고 있는 Application 영역에서 캐시, 즉 임시 저장소를 사용하는 방법을 고려해볼 수 있다.
입력에 따른 실행 결과를 저장해 두고 이후 동일한 입력값이 들어왔을 때 저장된 값을 이용함으로써 데이터베이스 부하를 줄이는 것이다.
3. denormalization (역정규화)
데이터베이스 운영에 있어서 읽기 작업은 매우 자주 일어난다.
정규화를 통해 쪼개진 표들을 계속해서 JOIN을 통해 읽어들이는 것은 읽기의 성능을 떨어뜨릴 수 있다.
(이것이 정규화 자체가 읽기 성능을 떨어뜨린다는 의미는 아니며, 역정규화는 정규화를 잘 이뤄낸 이후에 고민할 문제)
역정규화는 정규화처럼 정해진 엄격한 규칙이 없다. 최선의 결과를 내는 방법을 선택하면 된다. 아래는 그 예시들로 볼 수 있다.
<역정규화 대상 데이터>
1) 컬럼의 역정규화
JOIN은 상당히 비싼(COST가 높은) 작업이다. JOIN을 통하지 않고 특정 데이터를 얻는 방식으로 기존의 테이블을 재구성(추가 등)한다.
2) 테이블의 역정규화
description 의 값이 용량이 크고, 자주 읽어야 한다면, 컬럼을 기준으로 topic 테이블에서 description 컬럼을 삭제하고, title 컬럼과 description컬럼으로 구성된 새로운 테이블을 만들 수 있다. '샤딩'이라는 기법으로도 불리는데, 새로운 컬럼의 관리가 필요하다. 데이터 유지 관리가 상당히 어렵다.
아래의 방법은 행을 나누고, 새로운 행을 추가할 때 그 행의 author_id 값에 해당하는 값이 있는 테이블에 추가하게 했다. 역시 관리가 어렵다.
3) 관계의 역정규화
Foreign Key 추가를 통해 JOIN을 줄이는 방법이다.
author_id 가 1인 사람의 태그 이름을 조회하기 위해서는 2번의 JOIN이 필요했다. (topic_tag_relation, topic, tag)
topic_tag_relation 테이블에 author_id 컬럼을 추가하는 방식으로 JOIN의 횟수를 줄였다.
출처 :
수업을 마치며 - 생활코딩
강의소개 여기까지 오시느라 고생하셨습니다. 어떤 마음으로 공부하시면 좋을지를 이야기해봤습니다. 강의 지식지도 관련된 지식의 지도입니다. 지도를 참고해서 스스로 학습 경로를 탐험해
opentutorials.org
'DataBase' 카테고리의 다른 글
[Oracle] 테이블 수정하기 - CREATE, DROP, ALTER (0) | 2022.06.07 |
---|---|
[Oracle] Built-in Data Types (0) | 2022.06.05 |
[데이터 모델링] 논리적 데이터 모델링 (0) | 2022.05.27 |
[데이터 모델링] 개요, 개념적 데이터모델링 (0) | 2022.05.27 |
[Oracle] SQL SELECT 문의 활용 - JOIN (0) | 2022.05.26 |