샤딩 ( Sharding )

youngkyu MIn·2024년 1월 4일

샤딩 ( Sharding )

샤딩은 매우 큰 데이터베이스를 더 작고, 빠르고, 쉽게 관리할 수 있는 여러 부분으로 나누는 과정을 말한다. 이 방법은 특히 대규모 시스템에서 데이터 관리와 성능 최적화를 위해 널리 사용된다.

샤딩을 구현할 때, 어떤 데이터가 어느 샤드에 위치하는지를 추적하기 위한 메커니즘이 필요하다. 이를 '샤드 키(Shard Key)' 또는 '파티셔닝 키(Partitioning Key)'라고 부른다. 샤드 키는 데이터가 저장되거나 검색될 때 어떤 샤드로 가야 할지 결정하는 데 사용된다.


샤딩 전략

범위 기반 샤딩(Range-based Sharding)

이 전략에서는 샤드 키의 범위를 기준으로 데이터를 분할한다. 예를 들어, 날짜 범위, 숫자 범위 등이 될 수 있다. 이 방식은 데이터가 균등하게 분포되어 있을 때 효과적이다.


해시 기반 샤딩(Hash-based Sharding)

샤드 키에 해시 함수를 적용하고, 이 해시 값을 기반으로 데이터를 샤드에 할당한다. 해시 기반 샤딩은 데이터를 균등하게 분산시키는 데 유용하지만, 범위 검색이 어려울 수 있다.


Directory-Based Sharding

'디렉토리 서비스' 또는 '룩업 테이블'을 사용하여 각 데이터 항목이 어느 샤드에 위치하는지를 추적한다. 디렉토리 서비스는 모든 샤드에 대한 정보와 각 데이터 항목이 어느 샤드에 저장되어 있는지에 대한 정보를 보유한다.


샤드 클러스터

"샤드 클러스터(Shard Cluster)"는 샤딩된 데이터베이스 시스템에서 여러 샤드가 모여 구성된 전체 구조를 말한다. 샤드들의 집합이 샤드 클러스터를 형성한다.

구성

샤드: 샤드 클러스터의 기본 구성 요소다. 각 샤드는 데이터베이스의 일부 데이터를 독립적으로 보관하고 처리한다. 이러한 샤드들은 전체 데이터베이스의 부하를 분산시키고, 성능과 확장성을 향상시키는 데 중요한 역할을 한다.

샤드 노드: 각 샤드는 하나 이상의 데이터베이스 서버 노드(Shard Node)로 구성된다. 이 노드들은 실제로 데이터를 저장하고 처리하는 물리적 또는 가상의 서버이다.

클러스터 관리 시스템: 샤드 클러스터 내에서 데이터와 트래픽을 적절히 분산시키고 관리하는 역할을 한다. 이 시스템은 샤드 간의 데이터 분배, 쿼리 라우팅, 부하 균형 등을 담당한다.


레플리카 셋(Replica Set)

데이터의 복사본을 여러 서버(노드)에 걸쳐 복제하여 저장하는 것을 말한다. 레플리카 셋의 주된 목적은 데이터의 고가용성과 장애 복구를 보장하는 데 있다.

레플리카 셋은 하나의 '프라이머리(Primary)' 노드와 하나 또는 여러 개의 '세컨더리(Secondary)' 노드로 구성된다. 프라이머리 노드는 모든 쓰기 작업(데이터 삽입, 수정, 삭제)을 처리하고, 이러한 변경사항은 실시간으로 세컨더리 노드에 복제된다.

샤딩과 레플리카 셋은 데이터베이스 시스템의 확장성과 고가용성을 각각 향상시키는 두 가지 다른 메커니즘이다. 일반적으로, 레플리카 셋은 각 샤드마다 구현된다. 즉, 샤드 클러스터 내의 각 샤드는 자체적인 레플리카 셋을 가질 수 있다.

profile
한 줄 소개

0개의 댓글