참고
분산 저장 기법
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보다 높아야한다.
◦
비동기 방식으로 데이터를 동기화하면 일관성이 깨질 수 있다.