티스토리 뷰

DataBase

샤딩(Sharding)이란?

Hero_O 2022. 7. 27. 08:24

샤딩

수평 분할과 수직 분할

수직 분할
  • 이름에 맞게 수직으로 테이블을 나누는 것이다. 특정 컬럼을 다른 테이블로 쪼개서 저장하는 것을 의미한다. 제 3정규화와 다르게 이미 정규화가 된 테이블을 나누는 것이다.
  • 자주 쓰는 특정 컬럼을 분리하여, 성능을 향상할 수 있다.

 

수평 분할
  • 테이블을 로우를 기준으로 수평으로 분리하는 것을 의미한다.
  • Key 값을 기반으로 여러 곳에 분산하여 저장한다.

샤딩 이란?

  • 위 수평 분할과 같은 개념으로서, 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산 저장하는 방법을 의미한다.
장점
  • 로우의 개수가 줄어 스캔 범위가 줄면서 쿼리의 속도가 빨라진다.
  • Scaling Out 이 가능하다.
  • 장애가 샤드 단위로 발생함.
단점
  • 프로그래밍 및 운영적인 복잡도가 높아진다.
  • 데이터 유실이 생길 가능성이 높다.

 

 

샤딩의 방법

서로 다른 테이블의 어떻게 분산하고, 분산한 데이터를 어떻게 읽어올 것 인지는 샤드 키(shard key)에 따라 달라진다. 한쪽에 데이터가 몰리게 되면 샤딩이 무의미하기 때문에 균일하게 분산하는 것이 좋다.

 

해시 샤딩 (Hash Sharding)
  • 데이터 베이스이의 key 값을 hashing ( 해시 함수 : id % 노드 개수 ) 하는 방식.
  • 나눌 개수를 처음에 정해두면 변경할 수 없다
  • Key-Value 형태의 NoSQL에 적합
동적 샤딩 ( Dynamic Sharding )
  • Locator Service 를 통해 동적으로 테이블을 결정하는 방법
  • Locator Service에 의존적인 방식이라는 한계가 있음.
  • Key-Value 형태의 NoSQL에 적합
Entity Group
  • RDBMS를 위한 샤딩 방법으로, 샤드를 물리적으로 나누고 연관관계를 가지고 있는 Row들끼리 묶어서 하나의 샤드에 저장하는 방법
  • 하나의 샤드에 쿼리를 진행하면 효율적이지만 서로 다른 샤드가 영향을 받을 수 있는 쿼리는 일관성을 보장받을 수 없고 비 효율적이다.

'DataBase' 카테고리의 다른 글

인덱스 키의 빈번한 Update로 발생할 수 있는 오버헤드  (0) 2022.10.13
MySQL과 Redis  (0) 2022.10.10
Nested (Loop) Join 과 Hash Join  (0) 2022.08.23
CAP 정리란?  (0) 2022.08.20
트랜잭션 ( Transaction ) 이란?  (0) 2022.07.23
댓글