DATABASE

생활코딩 - DATABASE 관계형 데이터 모델링 - 물리적 데이터 모델링

joy_lee 2021. 5. 27. 13:35

물리적 데이터 모델링

논리적 데이터 모델링에서 만든 이상적인 표를 구체적인 제품에 맞는 현실적인 표로 만드는 과정

성능이 중요하다!

일단 운영해보고 데이터가 쌓인 후 부하가 큰 부분이 병목현상이 생기는지 확인

find slow query

 

성능을 향상시키는 방법

-인덱스 : 읽기성능 향상, 쓰기성능 저하, 저장공간 많이 차지함

-애플리케이션 : 캐시(cache) 사용해 데이터베이스 부하 줄임

(cache: 입력에 따른 실행결과 저장해두고 이후 동일한 입력에 대해 저장해둔 결과 출력하는 것)

-역정규화(다른 수단들을 시도해도 개선되지 않을 때 사용함. 단점이 많음)

 

역정규화(반정규화, denormalization)

정규화를 통해 만든 이상적인 표를 성능이나 개발의 편의성을 위해 표를 조작하는 것.

정규화 : 빠른 쓰기 위해 읽기 성능 희생 (읽을 때 join필요)

역정규화 : 빠른 읽기 위해 쓰기 성능 희생, 많은 저장공간 필요, 시스템이 복잡해진다

 

처음부터 역정규화를 하는 것이 아니라, 정규화를 제대로 실행한 뒤 성능개선을 위해 역정규화를 수행하는 것이다.

역정규화에는 엄격한 과정(법칙)이 정해져 있지 않다. 자유롭게 가능하다

 

역정규화 방법

1. 컬럼의 역정규화 - JOIN을 줄인다

중복값이 발생하지만 JOIN을 하지 않고 데이터를 다룰 수 있게된다. 처리 속도가 훨씬 빨라진다.

2. 테이블의 역정규화

- 컬럼을 기준으로 테이블을 분리한다

같이 사용하는 일이 많은 컬럼들끼리 테이블을 따로 만들어준다.

한 대에서 처리하던 연산들이 여러 대로 나눠서 처리할 수 있으므로 부하가 줄어들어 성능이 개선된다.

 

- 행을 기준으로 테이블을 분리한다

행이 아주 많을 때 사용한다.

관리가 어렵고 사고 위험이 높다.

대체로 여러 대의 서버로 분산할 때 사용할 수 있는 방법

3. 관계의 역정규화 - JOIN을 줄여 지름길을 만든다

Foreign Key 추가 -> 역정규화 줄임

author별로 tag를 확인할 경우 -> JOIN이 여러 번 일어나서 성능이 저하됨