DATABASE

[DB] 샤딩

집한구석 2021. 6. 2. 22:08
728x90

정의

  • 한 테이블의 row들을 여러 개의 서로 다른 테이블, 즉 파티션으로 분리하는 것
  • 키를 분리하여 나눠서 저장함
  • 수평분할(Horizontal Partitioning)이라고 볼 수 있음 (예시. 회원테이블을 성별로 나눔 남성테이블, 여성테이블)

샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리함


구현

  • 주로 Application Level에서 이루어짐 (어떤 Shards에 읽기, 쓰기를 전송할지 정의)
  • DBMS에 따라 샤딩이 내장되어 있는 경우, Database Level에서도 가능함

장단점

장점

  • 수평적 확장(Scaling out)이 가능함
  • 스캔 범위가 줄어서 쿼리 속도 향상됨

단점

  • 운영적인 복잡도가 커짐, 잘못 사용할 경우 데이터를 유실할 가능성이 큼
  • 데이터가 한쪽 Shards로 쏠리면, 샤딩 자체가 무의미해 질 수 있음
  • 한번 샤딩하면, 언샤딩으로 되돌리기가 힘듬

샤딩 방법

  • Shard Key를 정의하는 방법에 따라 데이터를 효율적으로 분산시키는 것이 결정

샤딩 종류

  • Hash Sharding
  • Dynamic Sharding
  • Entity Group 

Hash Sharding

Hash Sharding

  • 데이터베이스 아이디를 해싱하여 결정함, 매우간단한 기법
  • 같은 값을 가지는 Key-Value 데이터베이스에 적합
  • Cluster가 포함하는 Node 개수를 변경시 ReSharding이 필요함

Dynamic Sharding

Dynamic Sharding

  • Locator Service를 통해 Shard Key를 얻음
  • Cluster가 포함하는 Node 개수를 변경하여도 Locator Service에 Shard Key만 추가하면 되서 확장에 유연한 구조

Entity Group

Entity Group

  • 동일한 파티션의 관련 엔티티를 저장하여 단일 파티션안에서 추가기능을 제공하는 방식
  • 하나의 Shard에서 강한 응집도를 가짐
  • 확장성이 좋은 파티셔닝임
  • 특정 파티션간 쿼리가 자주 요구되는 경우가 있음

출처

 

How Sharding Works

This is a continuation of the last blog post, why I love databases.

medium.com

'DATABASE' 카테고리의 다른 글

[DB] REPLICATION(리플리케이션)  (0) 2021.11.13
[DB] 쿼리 처리 과정  (0) 2021.06.26
[DB] 인덱스 (INDEX)  (0) 2021.06.24
[DB] 트랜잭션  (0) 2021.05.16
[MySQL] 쿼리 튜닝 기초  (0) 2020.12.15