[DB] 샤딩

2021. 6. 2. 22:08·DATABASE
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에서 강한 응집도를 가짐
  • 확장성이 좋은 파티셔닝임
  • 특정 파티션간 쿼리가 자주 요구되는 경우가 있음

출처

  • https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6
 

How Sharding Works

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

medium.com

  • https://sophia2730.tistory.com/entry/Databases-Database-Sharding%EC%83%A4%EB%94%A9
저작자표시

'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
'DATABASE' 카테고리의 다른 글
  • [DB] 쿼리 처리 과정
  • [DB] 인덱스 (INDEX)
  • [DB] 트랜잭션
  • [MySQL] 쿼리 튜닝 기초
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    SQL
    AWS
    Kafka
    클린코드
    프로그래머스
    IntelliJ
    JPA
    ElasticSearch
    이펙티브 코틀린
    엘라스틱서치
    자바
    splunk
    Spring
    java
    Elk
    코틀린
    이펙티브코틀린
    go
    cleancode
    docker
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[DB] 샤딩
상단으로

티스토리툴바