Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
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 31
Tags more
Archives
Today
Total
관리 메뉴

jeongwon

[데이터베이스 모델링] 물리적 데이터베이스 모델링 본문

DataBase

[데이터베이스 모델링] 물리적 데이터베이스 모델링

jeongwon_ 2022. 5. 29. 19:34

선택한 데이터베이스에 맞는 물리적 표를 만드는 단계.

이 단계에서 중요한 것은 성능이다. 성능 향상에 대한 고민이 필요하다. 

 

데이터가 많아짐에 따라 생기는 병목 지점을 찾고(find slow query) 해결책을 찾는 일. 

최후의 보루는 이상적으로 정규화 된 표에 손을 대는 일, 즉 역정규화 / 반정규화 이다. 

 

 

1. index 

우선 고려해볼 만한 것. 행에 대한 읽기 성능을 향상시키지만, 쓰기 성능을 떨어뜨린다. 

쓰기를 할 때마다 기존의 인덱스에 관한 정리정돈의 연산과정이 필요하다. 

시간, 저장공간 문제가 발생한다. 

그럼에도 정리정돈을 잘하는 만큼 비약적으로 읽기 성능을 향상시킨다. 

 

2. cache

데이터베이스를 이용하고 있는 Application 영역에서 캐시, 즉 임시 저장소를 사용하는 방법을 고려해볼 수 있다. 

입력에 따른 실행 결과를 저장해 두고 이후 동일한 입력값이 들어왔을 때 저장된 값을 이용함으로써 데이터베이스 부하를 줄이는 것이다. 

 

 

3. denormalization (역정규화)

데이터베이스 운영에 있어서 읽기 작업은 매우 자주 일어난다.

정규화를 통해 쪼개진 표들을 계속해서 JOIN을 통해 읽어들이는 것은 읽기의 성능을 떨어뜨릴 수 있다. 

(이것이 정규화 자체가 읽기 성능을 떨어뜨린다는 의미는 아니며, 역정규화는 정규화를 잘 이뤄낸 이후에 고민할 문제)

 

역정규화는 정규화처럼 정해진 엄격한 규칙이 없다. 최선의 결과를 내는 방법을 선택하면 된다. 아래는 그 예시들로 볼 수 있다. 

 


<역정규화 대상 데이터>

 

 


1) 컬럼의 역정규화 

JOIN은 상당히 비싼(COST가 높은) 작업이다. JOIN을 통하지 않고  특정 데이터를 얻는 방식으로 기존의 테이블을 재구성(추가 등)한다.

 

(1) JOIN 줄이기
(2) 계산 작업 줄이기

 

 

 


 

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