TIL 53일차 : SQLD 1과목 데이터 모델링 (09~10일)

2024. 2. 9. 23:07회고/TIL(매일)

 

✏️도전한점


  1. SQLD 16주 완성시키기 프로젝트를 시작한다.
  2. 들어보니 튜터님이 왜 기초부터 제대로 공부하는 걸 추천했는지 알 수 있었다.
  3. 나중에 데이터 엔지니어 역량을 키우고 싶을 때, 유용할 내용이었다.
  4. 드디어 데이터 모델링이 끝나고 SQL로 들어간다.

 

🔎목차


1. SQLD 전반적인 설명

2. 데이터베이스 모델링

3. 엔터티, 속성, 관계, 식별자

4. 정규화

5. 대용량 데이터베이스

 

01 SQLD 전반적인 설명


1. 1.5년이 지난 시점에 온라인 강의 수강 시 영구 취득된다.
2. 과목별 데이터 모델링의 이해/ sql 기본 및 활용

1과목 10문제 20점- 8문제 이상 맞춰야 함 (주의)
2과목 40문제 80점 - 60퍼이상 맞춰야 함.

3. 최적화와 기본원리는 sqlp에 옮겨가는 추세이다.
4. 에스큐엘 = 시퀄
5. 강희 후에 연습 문제는 따로 풀어보기

 

02 데이테베이스 모델링


데이터베이스에서 모델이란? 데이터베이스의 구조나 형식
- 모델링이란? 위의 개념을 진행하는 것이지

데이터의 독립성이 필요한 이유 4가지 이해

어플리케이션 = 프로그램 이라고 생각한다.

3중 스키마 : 데이터베이스를 3개 범주로 쪼갠다.
- 쪼개는 이유는? 독립성을 확보하기 위함.
- 스키마 끼리 영향을 미치지 않기 위함.
- 외부(유저/프로그램/논리)>개념(구조/설계)>내부(실제/물리)

엔터티: entity, thing, 어떤 것, (내가 실제로 보고싶은 하나의)개체
속성: attribute, 성격, 특징
관계: entity와 entity간의 관계
ERD: 엔터티의 관계를 나타내는 그림

 

03 엔터티, 속성, 관계, 식별자


🔎학습목표
엔터티, 속성, 관계, 식별자

엔터티 : 데이터로 표현하고 싶은 개체, 레코드, 핵심구성요소
ex) 홍김동전 엔티티가 존재한다면?
이름/사원ID/연차/payment 속성이 있고
이름 속성에는 홍진경, 조세호라는 속성값이 있고
홍진경/3355/30/2,000,000 이라는 인스턴스
김숙/... 인스턴스
조세호/... 인스턴스
주우재/... 인스턴스
장우영/... 라는 인스턴스가 있다.

인스턴스 = 로우 데이터라고도 한다.

2개 이상의 인스턴스가 모여야 엔터티가 된다.
- 한개 뿐인 인스턴스는 집합이 아니기 때문이다.

엔티티를 설명할 수 있는 성격의 속성이 존재해야 한다.
- 홍진경의 사원번호로만 홍진경을 설명하기 어렵다.

💡속성이란? 업무에서 필요로 하는 인스턴스로, 관리하고자 하는
- 더이상 분리되지 않는 최소의 데이터 단위★★★★★
- 하나의 속성은 하나의 속성값을 갖는다.
- 더이상 분리되지 않아 그자체로 독립성을 유지한다.

식별자?
다른 인스턴스, 다른 데이터랑 구분할 수 있는 값

자꾸 업무에 필요한 요소만 넣으라고 강조하니까
그전에 체계없을 때 얼마나 막 넣었을지 상상돼서 웃김.

엔터티<=인스+인스<=속성+속성

속성의 특징
1. 정규화 이론에 기반을 두고
2. 정해진 주식별자에
3. 함수적 종속성을 가져야 한다.

함수적 종속성?
x가 y에 영향을 미칠 때, y는 x에 함수적 종속성이 있다고 말한다.
x를 알면 y를 알 수 있고, x가 변하면 y도 변하니까 y는 x에 함수적 종속 관계가 있음.

속성의 특징에 따라서 분류
기본속성/설계속성(모델링등을위해제작,변형)/파생속성(영향을받아생김)으로 나뉜다.
- 파생속성이 많이 생기면 a변경사항을 다른데도 적용해야하는데 안되면 데이터의 정합성이 깨지니까 많이 있을수록 정합성을 유지하기 어렵다.

속성의 구성방식에 따라서 분류
PK/FK/ 일반속성

관계에서 1:1관계는 1사용자당 1닉네임
1:M관계는 1부서당 M명의 사원
M:N관계는 서로 1:M, N:1 관계로 보는 것. 좋아요수(유저/게시글)

식별자
각각의 데이터를 구분해주는 속성

어커런스(occurence) = 행(row) = 레코드 = 실제 데이터
인스턴스와 같은 의미로 정의된 레코드의 구조에 따라 데이터베이스에 구체적이고 실제적인 정보를 담고 있는 실제 데이터를 의미한다. 엔터티를 구성하고 있는 각 속성들이 각각 값을 가지고 있는 상태이기 때문에 데이터베이스에서 값이 있는 테이블의 '행(row)'을 의미한다고 볼 수 있다.

외부식별자(Foreign Idenfigier)는 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식쪽 엔터티에 생성되는 속성을 의미한다.

부모 엔터티로부터 속성을 받아서 자식 엔터티가그 속성을 주식별자로 쓸 수 있다.
이런 경우에 빈값이 있으면 안된다.
IE 표기법으로 식별자 상속은 실선으로 나타낸다.

 

표기법 실습해보기

 

04 정규화


🔎학습목표
정규화

데이터베이스도 하나의 컴퓨터라고 생각하면 된다. 하드웨어
DBMS도 컴퓨터를 관리하는 프로그램일 뿐이다. 소프트웨어
USER인 우리는 데이터베이스란 컴퓨터에 계속 A라는 데이터 달라고 요청함.

우리는 '정규화'를 통해
'성능 데이터 모델링'을 수행할 수 있다.

성능 데이터 모델링이란?
데이터베이스 성능 향상을 목적으로 하는 작업이다.

수행 시점은?
데이터베이스가 만들어지기 전 설계할 때부터 해야한다는 말이다.

트랜잭션이란?
데이터베이스 항태를 변화시키기 위해 수행하는 작업의 단위

정규화란? 노멀라이제이션(= Normalization)
- 테이블에 있는 데이터 중복을 모두 제거하는 과정
- 데이터베이스 테이블을 쪼개는 과정 = 주제가 확실한 녀석들끼리 응집시키는 것

정규화 상세설명
- 특정 컬럼으로 ^규칙있게^ 분산시켜서 테이블의 컬럼 수가 줄어든다.
- 테이블 크기가 작아지니까 당연히 조회하는 성능도 증가한다.
- 데이터에 대한 중복성을 제거하여 성능을 향상시키는 것.
- 하지만 정규화를 한다고 항상 성능이 좋아지는 건 아니다!

-> 정규화가 진행된 형태 : 정규형(NF:Nomal Form)

함수적 종속성 (FD:Functional Dependency)
-> y는 x에 함수적 종속성을 갖는다.
-> 결정자(E=Determinant) 함수적 종속성에서 결정짓는 x요소를 결정자라고 한다.
-> 종속자(Dependent) 함수적 종속성에서 종속되는 y요소를 종속자라고 한다.
-> 결정자에 의해서->종속자가 바뀔 때 함수적 종속성이 있다고 말한다.
-> ex) 주민번호에 따라 이름, 성별, 나이, 주소지 등이 바뀌는 것.

정규화의 이점
1. 데이터의 유연성: 모든 프로그램(데이터베이스, 코딩 등)은 높은 응집도(상호관련도) & 낮은 결합도(상호의존도) 방향으로 만들어가야 한다.

정규형은 테이블형태의 데이터베이스(RDB)에서는 보통 5개의 정규형이 있다고 한다.
우리는 그 중에서 1NF, 2NF, 3NF 정규형에 대해서 배우고 응용할 것이다.

제1정규화(1NF)란? (정규화가 된 것을 정규형이라고 한다.)
- 한 줄 요약: 하나의 속성에 두 개의 속성값을 넣지 마라.
= 중복되는 속성 값 한 테이블에 넣지 마!

모든 정규화는 함수적 종속성을 근거로 정규화를 진행한다.

ex) 제1정규형을 위반한 테이블 형태는?
연락처 컬럼에 전화번호, 이메일이 하나의 컬럼에 모두 들어가 있을 때

제2정규화란?
제 1정규화를 만족시키고 PK가 아닌 모든 컬럼은 PK 전체에 종속

PK주식별자는 [이름/성별/나이] 를 한번에 묶어서 복합키(주식별자)로 사용 가능했다.
- PK가 아닌 모든 컬럼들은 이름만< 종속되고 이러면 안된다는 것이다.

복합키(Composite Key)란?
기본키(PK)로 사용할 수 있는 컬럼이 없을 때 2개 이상의 키를 합쳐 하나의 기본키로 활용하는 것을 의미한다.

제2정규화하는 이유는?
갱신 이상 현상이 발생할 수 있기 때문이다.

갱신이상이란?
반복되는 데이터 중 일부를 갱신했을 때 업데이트가 안되면 내용이 불일치하는 문제가 발생한다. (데이터의 정합성이 깨짐) 제2정규화 하지 않으면 갱신이상이 발생할 수 있다.

ex) 제2정규형을 위반한 테이블 형태는?
고객아이디(pk) | 주문아이템(pk) | 주문일자 | 고객이름 | 고객등급
이게 한 테이블의 컬럼일 때, 고객이름/등급은 주문아이템에 종속되지 않음.
A고객의 등급이 바뀌면 n개의 데이터행을 업데이트해야 해서
갱신 이상 현상이 발생할 수 있다. 이럴 때에는

-> 고객아이디(pk) 식별자를 기준으로 | 고객이름 | 고객등급
이라는 새식별자/새테이블을 따로 만들어 쪼개준다.

제3정규화 만족조건
제2정규화를 만족시키고 일반 속성 간에도 함수 종속 관계가 존재하지 않아야 한다.
-> 남은 애들끼리도 종속 관계가 없어야 한다. 있으면 따로 분리시킨다.
-> 이러면 제3정규화를 만족시킨 제3정규형이 된 것이다.

순서
[비정규형 릴레이션] 릴레이션 = 테이블
[제1정규화]
[제2정규화]
[제3정규화]
[BCNF] 보이스-코드 정규화, 결정자이면서 후보키가 아닌 것 제거
[제4정규화] 다치종속 제거
[제5정규화] 조인 종속성 이용
but 테이블이 계속 나눠지는 것이고, 무조건 성능이 좋아지는 것은 아니다.

반정규화 -> 다시 뭉쳐~는 아니고 중복 어느정도 허용.
목적 : 성능 향상을 목적으로 테이블 합치기

💡따라서★★★★★
정규화란? 테이블 쪼개서 -> 데이터의 중복을 최소화
반정규화란? 데이터의 중복을 어느정도 허용하면서 성능적 이점을 가져간다.

반정규화는 조회(읽기, read)
< 데이터를 가져오는 거에서 성능향상을 꾀하기 위해 반정규화를 많이 한다.

데이터베이스에서 읽기/쓰기 서비스 비율이 같은 비율로 일어나지 않음. 7:3

💡반정규화 절차★★★★★
1단계. 반정규화 대상 조사
2단계. 다른 방법 유도 검토(중복이 생기니까)
3단계. 반정규화 적용

반정규화 기법 3가지
첫 번째, 테이블 반정규화: 테이블 병합, 테이블 분할, 테이블 추가
두 번째, 컬럼 반정규화
세 번째, 관계 반정규화 pass(왜안하지)

Q. 테이블 분할은 정규화가 아닌가?
A. 정규화는 그 방법이 정해져 있다. 그 방법대로 테이블을 나누면 그게 정규화.
테이블을 나눈다 하더라도 그 방법을 따르지 않았다면 반정규화이다.

a. 테이블 병합하면 중복을 저장하게 되지만 but
조회 과정의 성능이 향상된다. 데이터베이스 쓰기보다 읽기의 비율이 크니까.

b. 테이블 분할<읽기 성능 향상을 위해 정규화가 아닌 수직/수평으로 잘라버림>
1. 수직 분할: 굉장히 많은 데이터가 있을 때 분산처리하기 위해서 테이블 분리
2. 수평 분할: 값의 범위를 나눠 ex)연도/월/일 테이블로 분산하여 처리한다.

c. 테이블 추가
중복, 통계, 이력, 부분 테이블 추가

컬럼 반정규화
- 중복 컬럼 추가
- 파생 컬럼 추가
- 이력 테이블 컬럼 추가
- PK에 의한 컬럼 추가
- 응용 시스템의 오작동을 위한 컬럼 추가
(A->B->C 과정으로 C까지 가지말고 A->C가는 컬럼을 추가하자는 것이다.)

근데 반정규화에 너무 매몰되지 말자, 우리가 꼭 기억해야 하는 건 정규화다.

💡복습
제1정규화: 하나의 속성에 두개의 값을 넣지 마라.
제2정규화: 복합키 중 하나의 짱에만 속한 애들은 따로 분리해라.
제3정규화: 짱을 제외한 얘들끼리 종속되면 안된다.

 

05 대용량 데이터베이스


💡지금까지 우리는
데이터 모델링을 중심으로 실제 데이터베이스를 만들기 전에 어떻게 하면
더 성능이 좋은 데이터베이스를 만들 수 있을지 방법론을 배웠다.

이번에는
1. 대량 데이터가 들어갔을 때, 데이터베이스 성능 저하 없이 사용할 수 있을지?
2. 데이터베이스 구조를 어떻게 하면 더 효율적으로 바꿀 수 있을지?
지금까지 우리는 테이블을 여러개 두는 방법을 배웠는데, 여기에 더해서
3. 데이터베이스 자체를 여러개둬서 하나의 시스템을 구성하면,
어떻게 성능을 더 효율적으로 쓸 수 있을지에 대해서 배워볼 것이다.

🔎학습목표
데이터베이스 구조와 성능에 대해서 학습한다.

[1] 대량 데이터에 따른 성능

(아까 배운 테이블 분할 개념임)
대량의 데이터가 하나의 테이블에 집약되는 건 피할 수 없는 과정이다.
테이블이 커졌다면, 수직/수평 분할을 통해 성향 향상을 기대할 수 있다.

(계속 나오니까 이해해둬)
수평분할은 테이블 구조는 유지된다.
수직분할은 테이블 구조 자체가 변함.

참고!
우리가 데이터베이스를 사용(USE)한다는 것 자체가
데이터베이스에 입출력(I/O)을 한다는 것과 동일한 개념으로 봐도 된다.
-> 데이터를 더하고, 수정하고, 삭제하고(입력) 데이터를 읽는 것(출력) 하니까

상세설명

- 우리는 sql문을 사용해서 데이터베이스 입출력을 하게 된다.
- 테이블 내의 모든 행은 블록(Block)단위로 디스크에 저장된다.
- 블록이 모여 테이블의 데이터가 된다.
- 컬럼이 많아지면 하나의 행을 저장할 때 물리적인 디스크에 여러 블록에 걸쳐 데이터가 저장될 가능성이 높아진다. 이런 경우 하나의 행을 읽더라도 여러 개의 블록을 읽는 것이 좋다. (좋다? 이부분 이해안돼 뒤에서 다시 배운다는데 체크하기)

대용량 데이터에서 발생할 수 있는 대표적인 성능 저하 현상
1. 로우 체이닝 : 절대적으로 읽어야 하는 데이터 블록의 개수가 증가함.
2. 로우 마이그레이션 : 절대적으로 읽어야 하는 데이터 블록의 개수가 증가함.

로우 체이닝
행 데이터가 너무 길어서 데이터 블록 하나에 다 저장을 못함.

로우 마이그레이션(이주)
수정한 데이터를 해당 데이터 블록에 저장하지 못하고 빈 블록을 찾아 저장함.

참고! 데이터베이스 파이셔닝(db Partioning)
1. 서비스 규모가 커지고 자연히 저장하여 관리하는 데이터가 많아지며서 기존 시스템으로는 관리하기 어려운 상황이 발생했다.
2. VLDB(vary large dbms)와 같이 하나의 dbms에 너무 많은 테이블이 저장되면서 성능과 용량 측면에서 많은 이슈가 발생.
3. 해결 방법으로 테이블을 나눠(partition)' 작은 단위로 쪼개 관리하는 파티셔닝(partitioning)기법이 발생.
4. 파티셔닝은 논리적인 데이터를 다수의 entity로 쪼개는 행위이다.
5. 큰 테이블이나 인덱스를 관리하기 쉬운 파이션이라는 작은 단위로 물리적인 분할을 하는 것을 의미한다.
6. 테이블을 물리적으로 분할하지만 데이터베이스에 접근할 때는 분할된 테이블로 인식하지 못한다는 특징이 있다.

이제부터 파티셔닝에 대해서 자세히 다뤄본다.
1. 테이블 수직 분할
2. 테이블 수평 분할
3. 수직/수평 분할 절차

a. 수직 분할을 통해 해결하기 예시
도서정보 테이블 - 1. 도서전자출판 테이블
                       - 2. 도서대체 테이블
(부모 테이블의 #주식별자를 그대로 가져가는거 = 상속)
-> 대체도서에 대한 정보는 2번 테이블,
전자출판 관려정보 조회할 때는 1번 테이블을 조회해서 성능을 더욱 향상시킴.
-> 1개 행을 읽을 때 읽어야 하는 컬럼 수가 줄어 들고,
필요한 데이터 블록의 수도 줄어드니까
-> 도서정보 테이블을 조회하는 경우에도 디스크 입/출력이 줄어 성능을 향상시킬 수 있다.(이건 그대론데 왜 줄어들지?)

b. 수평 분할을 통해 해결하기 예시(=범위 분할range patition)
통신요금 테이블
통신요금_211013 | 통신요금 211014 등등

c. 목록 분할(list partition)을 통해 해결하기 예시
범위분할과 비슷한데 실제 데이터 '목록'을 기준으로 분할.
고객 테이블
고객_서울 | 고객_부산 | 고객_광주 등등

d. 해시 분할(hash partition)
- 범위 분할을 월별로 해도 만약 겨울 스키장 이용고객에 대한 테이블이라고 하면 1/2월의 테이블만 용량이 터지게 되니까 이런 방법으로 성능 향상을 꾀한다.
- 해시 파티셔닝은 지정된 hash 조건에 따라 해싱 알고리즘을 적용하여 테이블을 분리한다.
- A값에 어떤 주솟값을 의미하는 숫자를 부여하고 거기에 맞는 테이블 그룹을 지정해서 조회로 연결함.
- 때문에 유니크한 컬럼을 기준으로 분할하는 기법.
- 데이터 관리X가 목적이 아니고 성능 향상에 주목적.
- 때문에 단점은 관리가 어려워지는 것(보관 주기를 알기 어려움, 어떤 파티션에 저장되는지 예측하기 어려움.)

e. 합성 분할(composite partitioning)
지금 배운 3개의 분할 방식을 섞어서 쓰면 합성 분할 방법이라고 한다.

예를 들어,
1. 범위 분할로 분할 이후 다시 여기에
2. 해시 함수를 적용해가지고
3. 테이블을, 파티션을 나눠서 구성하는 것

이렇게 여러개를 섞어서 분할하는 방법을 뭐라고 하는지? 이게 합성 분할이라고 하면 된다.

수평/수직 분할의 절차
1. 데이터베이스 모델링 진행
2. 데이터베이스 테이블의 용량을 살펴본다.
3. 트랙잰션(데이터베이스가 한번에 처리하는 작업의 단위) 처리 패턴을 분석한다. (=우리의 비즈니스 로직에 따라서 우리 서비스가 어떻게 데이터를 바꾸고 있는지를 분석한 다음.)
4. 처리 과정이 컬럼이 많은지 로우가 많은지 분석하고
5. 그 다음에 파티셔닝 해야한다.

너무 당연해보이지만 보기로 나오면 헷갈린다.

참고! 트랜잭션 설명
- 데이터베이스는 모든 답을 그때그때 처리하는 게 아니라 트랜잭션이라는 단위로 묶어서 처리한다.
- 묶인 데이터 처리명령 A/B/C/D 안에 C테이블 수정사항이 발생하면 C로 회귀하는 게 아니고 A/B/C/D로 묶인 트랙잭션 단위로 회귀해서 수정해야 하는 것이다.

[2] 데이터베이스의 구조와 성능

슈퍼타입/서브타입
- 데이터를 다루다보면 테이블 간에 공통적인 컬럼이 있다. 이걸 슈퍼타입이라고 하고 서브타입은 자신만의 속성을 의미한다.
- 슈퍼/서브로 나눠서 데이터모델링을 생각해 볼 수 있다는 개념이다.

슈퍼/서브타입 모델 3가지
1. 개별 타입: one to one type + 1:1
2. 서브 타입: plus type/ 슈퍼+서브type
3. 슈퍼 타입: single type/ 올인원type

슈퍼/서브타입 모델 3가지 설명
1. 개별 타입: 각각 테이블로 존재한다.
2. 서브 타입: 서브 타입 안에 공통된 슈퍼타입 하나씩 가지고 있음.
3. 슈퍼 타입: 테이블 하나에 모두 포함한다.

슈퍼타입/서브타입 모델 변환의 중요성
트랜잭션을 이해하면 모델 변환의 중요성을 깨달음.

트랜잭션은
1. 항상 일괄적으로 처리된다.
2. 항상 서브타입은 개별로 처리된다.
3. 항상 슈퍼타입, 서브타입이 공통으로 처리된다.
-> 따라서 분할하지 않으면 성능 저하될 수 있다.

<인덱스 특성>을 고려한<PK(기본키)> 데이터베이스 성능 향상 prat
- 복합키(PK+PK+PK)의 순서를 바꾸는게 성능에 영향을 미친다.

예시 1.
1. 우리가 단일PK를 지정하면 데이터베이스는 PK를 기준으로 데이터를 많이 조회하고 삭제하겠구나 인식을 한 후,
2. 데이터베이스 내부적으로 PK로 지정된 컬럼에 대해서 정렬을 쭉해서 가지고 있게 된다.
3. 근데 복합ABC키로 지정하면 DB는 A, AB, ABC로 정렬한 경우 이렇게 3가지만 가지고 있게 되어 BC로 된 데이터를 찾아달라고 하면 성능 저하옴.
4. 이럴 경우 BCA로 복합키 순서를 바꿔준다면? 성능이 향상되겠다.
- 단, 모든 요쳥에 대해 바꾸지 않고, 많이 조회된다면 변경하는 게 좋다.

예시 2.
1. between a and b 는 컬럼값을 가져와서 범위에 속하는지 한번 더 체크
2. 때문에 and 연산자를 사용하는 경우 후순위로 변경해주면 성능 향상을 꾀할 수 있다.

후기: 신기하다. 데이터 처리 순서를 알면 성능 향상을 꾀할 수 있구나.

<인덱스 특성>을 고려한<FK(외래키)> 데이터베이스 성능 향상 prat
-> 위의 PK처럼 FK도 순서를 정하면 성능이 좋아지지 않을까?라는 의문에서 출발한다. 이것은 DBMS(프로그램)마다 다르고, 이번 내용은 충분히 읽어본다.

[3] 분산 데이터베이스와 성능

지금까지 우리는 하나의 거대한 데이터베이스 안에서,
테이블을 나누고 쪼개는 과정을 배웠다.

이제부터 데이터베이스를 나눌 것이다. 근데 네트워크로 연결해서
마치 하나의 데이터베이스인 것처럼 쓰게 된다. = 분산 데이터베이스

다시 말해, 물리적으로 시스템이 나뉘져 있다. 중요한 건 네트워크로 연결해서 마치 하나의 데이터베이스인 것처럼 만들어서 사용할 수 있다.

뛰어난 성능이 필요한 곳이 아니라 요즘엔 다 분산 데이터베이스를 사용한다. 일반적으로 많이 사용하는 기술 중 하나라는 뜻이다.

분산 데이터베이스의 개요
1. 물리적으로 동일한 위치(서울)에
2. 여러 대의 컴퓨터로 구성을 하는 것.
3. 컴퓨터 네트워크로 상호 연결하여
4. 하나의 데이터베이스인 것처럼 쓴다.

요약하자면
1. 논리적으로는 동일한 시스템이지만
2. 물리적으로는 분산되어 있는 데이터의 모임
- 물리적으로는 분산되어 있지만, 논리적으로는 여러 사람들이 사용할 수 있는 것처럼 가상의 시스템을 구축하여 데이터를 관리하는 것.

논리적으로 하나! 물리적으로는 분산!

분산 데이터베이스 이점은?
대용량 데이터 처리를 하나의 시스템에서 하는 것보다
여러 개의 컴퓨터로 나눠하는 게 빠르겠지?

분산 데이터베이스 적용의 단점
ex) user와 order로 나눠놨는데 우리 서비스 환경이 user+order해서 많은 조회를 요구한다면?
-> 이 과정에서 네트워크 통신이 필연적이게 된다.
-> 이런 경우라면 분산DB보다 합치는게 낫다.
-> 우리의 서비스를 잘 분석하고 우리의 데이터베이스가 실제로 어떤 트랜잭션을 처리하는지 이해한 다음에 분산 데이터베이스를 적용해야 한다.

분산 데이터베이스 적용 기법
1. 테이블 위치 분산: 테이블 위치 바꾸기
2. 테이블 분할 분산: 수평/ 수직 분할
3. 테이블 복제 분산: 부분복제/ 광역복제
4. 테이블 요약 분산: 분석요약/ 통합요약

상세설명
1. 자재 테이블은 본사에, 생산 테이블은 지사에 위치시키고 둘을 네트워크로 묶는다.
2. 수평/수직 나누고 네트워크로 묶는다.
3. 부분복제: 전체 테이블은 본사에 두고, 분할한 테이블마다 지사에 위치시킨 걸 네트워크로 연결.
광역복제: 다 복사해서 각각 가지고 네트워크로 연결.
4. 분석요약: 분산된 <동일한 내용>의 데이터를 (새벽시간을 이용해) 통합된 데이터로 산출하는 방식
통합요약: 분산된 <다른 내용>의 데이트를 이용하여 통합된 데이터를 산출하는 방식

결론: 절대적인 경우는 없다. 비즈니스 형태는 너무나 다양해서. 여러 방법론을 공부한 다음에 서비스 별로 어떤 분산방법이 좋을지, 인사이트 효율적으로 내는 방법을 도출할 수 있으면 되겠다.

💡여기까지 5강에서 배운 내용 정리
1. 대량 데이터가 들어왔을 때 성능 향상을 꾀하는 방법
2. 데이터베이스 구조를 바꿔서 성능 향상을 꾀하는 방법
3. 테이블이 아닌, 데이터베이스를 여러 개  둬서 성능을 높이는 방법에 대해 배워봤다.

 

06 [2] 데이터베이스의 구조와 성능 추가자료


 

07 ERD 참고자료