DB

Sharding

잔망루피 2022. 10. 17. 21:00

Sharding을 왜 할까?

과거에는 CPU 또는 Memory 사이즈를 증설하여 성능 이슈를 해결

최근 Web 서비스에서 데이터 사이즈가 급증 ➡️ 서버 성능 고도화만으로는 한계가 있다.

다수 장비에 데이터를 분산 위치하여 데이터를 처리하는 Sharding을 하게 됨

 

Sharding

  • 크게 분할과 복제로 나눈다.
  • 대규모 데이터베이스를 더 작고 빠르고 더 쉽게 관리되는 부분으로 분리
  • shard는 전체의 작은 부분
  • 논리 shard가 다른 노드에 저장되면 물리적 shard다.
  • 하나의 물리적 shard는 다수의 논리적 shard를 포함할 수 있다.
  • shard는 자율적이고 같은 데이터나 컴퓨팅 자원을 공유하지 않는다.
  • 모든 shard의 데이터는 논리적 데이터 집합을 나타낸다.

 

Sharding의 장점

  • 데이터베이스 확장성, 성능, 관리 향상
  • 데이터베이스의 트랜잭션 비용을 줄인다.
  • 높은 가용성
  • 읽기/쓰기 처리량 증가

 

Horizontal sharding Vertical sharding
각 새 테이블이 같은 스키마를 가지고 있지만 고유한 행이 있는 경우 

더 많은 시스템이 기존 스택에 추가되어 부하를 분산시키고 처리 속도를 높이며 더 많은 트래픽을 지원

이 방법은 쿼리가 종종 함께 그룹화된 행의 하위 집합을 반환할 때 가장 효과적

scaling out이라고도 함

병렬 처리에 특히 유연한 데이터베이스 설계를 생성하는 것을 돕는다.

높은 workloads와 빅 데이터 요구사항에 대해 거의 무제한에 가까운 확장성을 제공

사용자는 모든 쿼리에 대한 클러스터 전체의 모든 컴퓨팅 자원을 최적으로 사용할 수 있다.

각 컴퓨터는 쿼리에 응답할 때 더 적은 행을 스캔해야 하기 때문에 쿼리 확인 속도를 높인다. 
각 새 테이블에 원본 테이블의 스키마의 충실한 하위 집합인 스키마를 가질 경우

쿼리들이 대게 데이터의 열의 하위 집합만을 리턴할 때 효과적이다.

RAM 또는 저장 용량을 증가시킨다.

CPU 용량을 향상시킨다.

따라서 단일 시스템 또는 서버의 전력을 증가시킨다.


 

sharding과 partitioning의 차이

데이터베이스가 sharded된 후 새 테이블에 있는 데이터는 다수의 시스템으로 분산된다.

partitioning은 단일 데이터베이스 인스턴스 안에서 데이터 하위집합을 그룹화한다.

 

 

Sharding 아키텍처 종류

종류 작동 방법 장점 단점
Key 해시 함수에 연결된 데이터를 통해  각 데이터 값이 어떤 shard로 이동해야 하는지 결정

데이터 분산으로 hotspot을 막는다.

데이터 map은 필요없다.
동적으로 서버를 추가 및 삭제하는 것이 어려움

재조정하는 동안 해시 함수가 유효하지 않을 수 있다.

서버는 migration하는 동안 새 데이터를 쓸 수 없다.
Range 주어진 값의 범위에 따라 데이터를 샤딩(분할)하고, 샤드 키라고 하는 필드를 기반으로 한 범위 간단한 구현

서로 다른 shard가 서로 동일한 스키마를 가지므로 간단한 알고리즘 사용 


데이터베이스 hostpots를 생성할 수 있다.

잘못된 shard key 선택은 성능에 부정적인 영향을 줄 수 있다.
Directory Lookup 테이블은 샤드 키를 사용하면 어떤 샤드가 어떤 종류의 데이터를 보유하고 있는지 추적 유연성 향상

해시 함수를 필요로 하지 않는다.

각 key를 자체 특정 샤드에 연결
어플리케이션 성능에 부정적인 영향을 줄 수 있다.

Lookup 테이블이 손상되거나 실패하면 데이터 손실 및 접근성 문제가 발생할 수 있다. 

 

 

 

참고 👇

https://www.techtarget.com/searchoracle/definition/sharding

 

What is Sharding?

Learn more about sharding -- a type of database partitioning that separates large databases into smaller, faster, more easily managed parts.

www.techtarget.com

 

https://gywn.net/2012/03/gizzard-a-library-for-creating-distributed-datastores/

 

트위터의 새로운 분산 관리 라이브러리 Gizzard를 소개합니다. – gywndi's database

Overview 바로 이전 “하루 2.5억 트윗을 저장하는 트위터의 새로운 저장 스토어” 포스팅에서 트위터의 새로운 저장 스토어에 관해서 전반적으로 설명 드렸는데요, 이번에는 그 중 Gizzard에 관해

gywn.net

 

반응형