Search
Duplicate
📒

[Database Study] 02-x. 파티셔닝, 샤딩, 레플리케이션

상태
미진행
수업
Database Study
주제
기본개념
연관 노트
3 more properties
참고

분산 저장 기법

NOTE
파티셔닝, 샤딩, 레플리케이션에 대해서 공부한다!
여러대의 서버에 DB를 저장하는 방식

파티셔닝(Partitioning)

NOTE
파티셔닝 ⇒ 데이터베이스를 특정 조건을 적용해 여러 부분으로 분할하는 것!
분할하는 방향에 따른 종류가 존재한다.
장점
파티션별 연산으로 I/O 분산이 가능하여 성능이 향상된다.
파티션별로 백업 및 복구가 가능하다.
전체 데이터를 손실할 가능성이 줄어든다.
단점
테이블이 여러개로 나누어지기 때문에 JOIN연산에 대한 비용이 증가하고, 인덱스를 별도로 파티셔닝 할 수 없다.

수직 파티셔닝(vertical partitioning)

NOTE
contents는 SELECT에 없는데 실제로 DB를 읽을때는 전체를 읽고 필터링한다. 하지만 contetnts의 내용이 크므로, 불필요한 IO가 낭비된다.
수직 파티셔닝을 통한 테이블 분리를 통해 조회 성능을 향상시킴
DB 정규화 과정도 일종의 수직 파티셔닝이라고 볼 수 있다.

수평 파티셔닝

NOTE
데이터가 커질수록 부하가 커진다 (수평 파티셔닝 도입)
테이블의 크기가 커질수록 인덱스가 커지면서, 성능저하가 발생한다.
hash function을 통한 분리 (user_id는 partition key라고한다.)
hash function의 종류에는 여러가지가 존재한다.
Hash Sharding(Modular Sharding) ⇒ PK % DB 수
Range Sharding ⇒ 범위지정(1~4(DB1), 5~8(DB2))
주의점
partition key이외의 컬럼으로 조회하는 경우 2개의 테이블을 모두 조회해야한다.
데이터가 균등하게 분배될 수 있도록 hash function을 잘 정의해야 한다.
partition이 나눠져서 사용되면 이후에 추가하기 어렵다.

샤딩(Sharding)

NOTE
샤딩 ⇒ 수평 파티셔닝과 거의 동일하나 다른 서버에 저장한다!
파티셔닝은 동일한 서버에 테이블을 나눠서 저장하는 것
장점
Request에 대한 부하를 서로 다른 샤드가 있는 여러 서버에 분산이 가능하다.
DB 스키마를 유지하기 때문에 DB확장에 용이하다.
단점
프로그램 복잡도가 높아지고, 서버간의 연결 과정이 많아져 비용이 증가한다.
하나의 서버가 고장나면 데이터 무결성이 깨질수도 있으며 한번 샤딩을 이용하면 이전의 구조로 돌아가기 힘들다.

복제(Replication)

NOTE
레플리케이션⇒ 데이터베이스 분할이 아닌 완전히 복제해서 다른 서버에 두는 방식!
일반적으로 원본(master)/복제본(slave)형식으로 이루어진다.
장점
읽기 작업에 대해서 Slave DB로 부하분산이 가능하다.
비동기 방식으로 동기화되어 지연시간이 거의 없다.
Master DB가 장애가 발생할 경우, MHA를 이용해 Slave DB를 Master로 승격시켜 Failover가 가능하다,
단점
다른 서버에서 운용하므로, 버전 동기화를 진행해야 하며 Slave버전이 Master보다 높아야한다.
비동기 방식으로 데이터를 동기화하면 일관성이 깨질 수 있다.