넓고 얕은 데이터베이스 지식

데이터베이스 파티셔닝(Partitioning)과 샤딩(Sharding) 1분 요약 정리

팡펑퐁 2023. 1. 24. 02:04
728x90
📌 분할에 대하여
 물건을 보관하는 서랍 A, B 두 개가 있다고 하자. 두 서랍의 크기는 동일하지만  A 서랍에는 하나의 저장 공간만 있고, B 서랍에는 저장 공간이 여러 칸으로 나누어져 있다. B 서랍에는 특정 규칙에 의해 물건이 분류되어 각 칸에 들어있다. 여러 명이 같은 시간대에 서랍 안에 있는 물건을 찾으려고 한다면 A 서랍과 B 서랍 중 어느 서랍에서 찾는 것이 더 빠르겠는가? 물건을 찾으려는 사람들이 앞서 말한 특정 규칙에 의해 물건이 어느 쪽으로 분류되어 있는지 알고 있다면 아마 B 서랍일 확률이 높을 것이다.

 

 

📌 파티셔닝과 샤딩

 데이터베이스도 마찬가지이다. 모든 데이터를 하나의 데이터베이스(or 테이블)에 저장한다면 관리나 성능 측면에서 불리해질 수밖에 없다. 하나의 데이터베이스에 모든 데이터를 저장한다면 데이터베이스의 크기는 커질 것이고 데이터를 읽고 쓰는 속도는 점점 느려질 것이다. 이에 병목현상이 발생할 가능성도 높다. 이를 해결하기 위해서는 데이터베이스를 분할하여 관리를 해야 하는데 이때 사용되는 방법이 파티셔닝(Partitioning)과 샤딩(sharding)이다.

 

 

📌 파티셔닝(Partitioning)

  • 파티셔닝은 데이터베이스를 분할하는 것을 말한다.
  • 장점
    • 파티셔닝을 통해 성능, 가용성, 관리용이성을 확보할 수 있다.
  • 단점
    • 그러나 파티셔닝은 테이블을 여러 파티션으로 쪼개므로 JOIN 비용이 증가한다.
    • 테이블과 인덱스를 별도로 파티셔닝 할 수 없어 테이블과 인덱스를 함께 파티셔닝 해야 한다.

 

📌 종류

수직 파티셔닝(Vertical Partitioning)

  • 수직 파티셔닝은 동일한 데이터베이스 상에서 하나의 테이블을 열을 기준으로 나누는 것을 말한다.
  • 장점
    • 자주 사용하는 칼럼을 분리하여 성능을 향상할 수 있다.
    • 같은 타입의 데이터가 저장되어 데이터의 압축률을 높일 수 있다.
    • 필요한 칼럼만 조회가 가능하므로 성능 측면에서 좋다.
  • 단점
    • 데이터를 찾는 과정이 기존보다 복잡하여 Latency가 증가한다.

 

 

📌 수평 파티셔닝(Horizontal Partitioning)

  • 수평 파티셔닝은 동일한 데이터베이스 상에서 하나의 테이블을 행을 기준으로 나누는 것을 말한다.
  • 장점
    • 데이터의 개수를 기준으로 파티셔닝이 가능하다.
    • 데이터와 인덱스 개수가 줄어 성능이 향상된다.
  • 단점
    • 데이터를 찾는 과정이 기존보다 복잡하여 Latency가 증가한다.

 

 

📌 샤딩(Sharding)

  • 샤딩은 다수의 데이터베이스에 동일한 테이블 스키마를 가진 데이터를 분산 저장하는 방법이다.
  • 수평 파티셔닝은 동일한 데이터베이스에서 하나의 테이블을 분할한다면, 샤딩은 하나의 큰 테이블을 분할하여 각기 다른 데이터베이스에 분산 저장을 하는 방식이다.
  • 장점
    • 수평 파티셔닝과 동일하다.
  • 단점
    • 데이터베이스 서버 간의 연결로 비용이 발생하며, 하나의 서버가 고장 나면 데이터의 무결성이 깨질 수 있다.

 

📌 파티셔닝의 종류

List Partitioning

  • 데이터를 특정 리스트별로 분류하여 파티셔닝 하는 방법이다.
  • ex) 미국 지역별 판매량 분류
    • East Sales Region - NewYork, Virginia, Florida
    • West Sales Region - California, Oregon, Hawaii
    • Central Sales Region - Illinois, Texas, Missouri

Range Partitioning

데이터를 특정 범위 기준으로 파티셔닝 하는 방법이다.

  • ex) 월별 판매량 분류
    • 1 ~ 4월
    • 5 ~ 8월
    • 8월 ~ 12월

Hash Partitioning

  • 해시 함수를 사용하여 칼럼을 해싱하고, 그 값을 기준으로 파티셔닝 하는 방법이다.
    • ex) h1, h2, h3, h4

Composite Partitioning

  • 위 파티셔닝 중 두 개 이상을 사용하는 방식이다.

 

📌 샤딩의 종류

Hash Sharding

  • 해시값을 이용한 샤딩

Range Sharding

  • PK 값으로 범위를 만들고 샤드를 지정하는 방식이다.

 

 

참고 : 

https://code-lab1.tistory.com/202

https://hudi.blog/db-partitioning-and-sharding/

728x90