샤딩

유수민·2022년 7월 11일
0

지식창고

목록 보기
39/64

📌1. 배경지식

데이터베이스의 능력을 확장하는 방법은 크게 수직적 방법과 수평적 방법이 있다.

  • 수직적인 확장: 물리적인 서버의 개수는 그대로 두고 서버의 능력을 확장하는 것 ex) 하드웨어 업그레이드 , 저장장치를 더 큰 것으로 바꾸기.

  • 수평적인 확장 : 물리적인 서버의 갯수를 늘려서 서버의 부하를 분산시키는 방법. 큰 하나의 테이블을 두 개 또는 그 이상으로 쪼개서 분산시키는 것으로 두가지 방법이 있다.

    1) 수직 파티셔닝

    • 테이블을 수직으로 자르는 것 ex) 고객 정보 테이블: 고객의 아이디, 이메일 주소, 우편 주소, 전화번호와 같은 정보를 담고 있다→ 수직 파티셔닝은 이 중 우편 주소와 전화번호를 별도의 테이블로 분리시키는 것
    • 분리된 테이블은 기존 테이블의 고유 키를 가지고 있으며 이를 통해 JOIN 연산 같은 방법으로 기존 테이블과 결합해서 쓸 수 있다
    • 테이블의 갯수가 늘어나고 스키마에도 변화가 온다.

    2) 수평 파티셔닝

    • 테이블을 수평으로 자르는 것이다. 즉 스키마 자체는 그대로 두고 레코드를 나눠서 분산 저장. ex) 기존의 테이블에 1억 명의 고객 정보가 저장되어 있다면 이를 100만 명 단위로 잘라서 100개 테이블로 만드는 것이다. 그리고 앞으로 새로 저장할 고객 정보들은 적절한 방법을 통해서 이 100개 테이블에 고르게 분산시킬 것이다.
    • 수평 파티셔닝은 스키마는 변하지 않고 테이블의 갯수만 늘어난다.

이러한 파티셔닝은 기본적으로 같은 데이터베이스 안에서 테이블을 쪼개는 방식으로 구현이 되는데 샤딩은 한 발 더 나아가서 아예 데이터베이스를 분리시키는 것이다.

📌2. 샤딩이란?

샤딩은 수평으로 확장하는 기법 중 하나로, 테이블을 특정 기준으로 나눠서 저장 및 검색하는 것. 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 수평 분할된 작은 테이블인 샤드(shard)에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리한다. 샤드는 독립된 개별 서버에 저장된다.

📖등장이유

DB에 방대한 양의 데이터를 저장하다보니 용량과 확장성에 대한 문제와 데이터 조회시 검색 속도에 대한 문제로 등장하게 되었다.

📖장단점

장점

  • Scale-Out이 가능
  • 스캔 범위를 줄여서 쿼리 반응 속도를 빠르게 함
  • 장애가 샤드 단위로 발생함 ( 한 샤드가 실패하더라도 다른 샤드는 데이터서비스 제공)

단점

  • 프로그래밍 복잡도가 증가 → 데이터 유실할 가능성이 큼
  • 데이터가 한 쪽 샤드로 몰릴 경우(Hotspot), 샤딩이 무의미 해짐
  • 잘못 사용할 경우 risk가 큼
  • 한번 샤딩 사용시 샤딩 이전의 구조로 돌아가기 힘듬

📖3. Shard Key 방식의 종류

샤딩에서는 Data를 어떻게 잘 분산 시켜 저장할 것인지, 그리고 어떻게 잘 읽을 것인지에 대한 결정이 핵심이기 때문에 그 기준이 되는 Shard Key의 방식은 여러개로 존재한다.

  • Hash Sharding
  • Dynamic Sharding
  • Entity Group

📚1) Hash Sharding

샤드키를 (데이터베이스 id%num)을 하여 정하는 방식으로 결과에 따라 DB 서버에 저장된다. Key-Value 데이터베이스에 적합하다.

num : Cluster안의 Node 개수, DB서버 개수

  • 장점 : 간단한 방식
  • 단점
    • DB 서버가 추가 될 경우 해쉬 함수가 변경되어야 하므로 기존에 저장된 데이터 정합성이 깨짐. (확장성이 낮음)
    • 데이터 저장의 공간적 효율에 대한 고려는 하지 못함

📚2) Dynamic Sharding

Locator Service를 통해 Shard Key를 얻는 방식이다.Key-Value 데이터베이스에 적합하다.

  • 장점 : 확장에 유연. → Locator Service에는 키만 추가하면 되니 기존의 Datat의 Shard Key의 변경 없음
  • 단점 : Locator Service가 단일 장애점이 됨.

📚3) Entity Group

관계가 되어있는 엔티티를 같은 샤드내에 구성하는 방식이다.

  • 장점 : 단일 샤드 내 쿼리가 효율적이고 강한 응집도를 가져 같은 샤드의 데이터 조회시 효과적
  • 단점 : 다른 샤드의 엔티티가 연관되어 있는 경우 데이터 조회시 성능이 떨어짐.
profile
배우는 것이 즐겁다!

0개의 댓글