728x90

샤딩 전략

데이터베이스 관리에서 대량의 데이터를 분할하여 여러 샤드로 나누는 방법을 정하는 방식을 의미하며 각 샤드는 독립적으로 운영되며 데이터 일부를 저장하고 처리합니다. 다양한 샤딩 전략이 있으며, 선택한 전략은 데이터의 특정, 시스템의 요구 사항 및 확장성에 따라 다를 수 있습니다.

레인지 샤딩

[출처]Sharded MySQL Cluster 도입 배경과 개발기 (부제: 우당탕탕 좌충우돌 개발기) (gmarket.com)

데이터베이스 관리에서 사용되는 샤딩 전략 중 하나로, 데이터를 연속적인 값의 범위네 따라 분할하는 방식을 의미합니다. 이 전략은 데이터를 샤드로 분할할 때 데이터의 값 범위를 기준으로 샤드를 나누는 방식으로 동작합니다.

예를 들어보면 사용자의 나이를 기준으로 레인지 샤딩을 적용한다고 가정해 보면 각 샤드는 나이 범위를 가지며, 해당 범위 내의 사용자 데이터를 저장합니다. 첫 번째 샤드는 0세에서 20세까지의 사용자 데이터를 저장하고, 두 번째 샤드는 21세에서 40세까지의 데이터를 저장하는 식입니다.

레인지 샤딩 고려할 점

  • 데이터 불균형 : 데이터 분포가 불균형하면 일부 샤드에 부하가 집중될 수 있습니다. 이를 해결하기 위해 범위를 조정하거나 다른 샤딩 전략을 고려할 수 있습니다.
  • 샤드 추가 및 삭제 : 새로운 데이터가 들어오거나 시스템이 확장될 때 새로운 샤드를 추가하거나 삭제하는 작업이 복잡할 수 있습니다.
  • 데이터 범위 변경 : 데이터의 분포가 변할 경우, 샤드의 범위를 조정해야 할 수 있습니다. 이는 샤드의 재배치를 필요로 할 수 있습니다.
  • 조인 작업 : 데이터가 여러 샤드에 분산되어 있을 때 조인 작업이나 복잡한 쿼리 작업은 조금 더 복잡해질 수 있습니다.

해시 샤딩

[출처}:[DB] 샤딩(sharding )이란? :: 까치의 일상노트 (tistory.com)

데이터베이스에서 사용되는 샤딩 전략 중 하나로, 데이터의 값을 해싱하여 그 해시 값을 기반으로 데이터를 여러 샤드로 분할하는 방식을 의미합니다. 이 방식은 데이터를 임의의 순서로 샤드에 분산시키는 데 사용되며, 해시 함수에 의해 결정되기 때문에 데이터 분포를 균일하게 만들 수 있습니다.

해시 샤딩 특징

데이터 분산 : 해시 함수를 사용하여 데이터를 샤드에 분산시킵니다. 이로써 데이터의 분포가 균등하게 되어 부하를 분산시킬 수 있습니다.

예측 불가능 : 데이터의 해시 값은 예측하기 어렵기 때문에 데이터가 어느 샤드에 저장될지 예측할 수 없습니다.

복잡한 쿼리 처리 : 범위 쿼리나 조인과 같이 여러 샤드에 걸친 작업은 복잡해질 수 있습니다. 해시 샤딩은 주로 단일 항목 조회에 적합한 특성을 가집니다.

데이터 이동 문제 : 샤드의 수를 변경하거나 데이터를 재배치해야 할 때 데이터 이도이 복잡하게 될 수 있습니다.

데이터 무결성 : 데이터의 일과성과 무결성을 유지하기 위해 추가적인 노력이 필요할 수 있습니다.

모듈러샤딩

[출처}:https://techblog.woowahan.com/wp-content/uploads/img/2020-07-06/thiiing-db-modular-sharding.png

데이터의 특정 속성 값을 정수로 나눈 나머지를 기반으로 데이터를 여러 샤드로 분할하는 방식을 말합니다. 이 방식은 해시 샤딩과 유사한 원리를 가지며, 데이터 분산을 균일하게 할 수 있습니다.

모듈러 샤딩 동작 방식

  • 샤드 개수 선택 : 먼저 몇 개의 샤드로 데이터를 나눌 것 인지 결정합니다. 보통은 2의 거듭제곱수로 샤드 수를 선택하는 것이 좋습니다.
  • 모듈러 연산 : 선택한 샤드 수로 데이터의 특정 속성 값을 나눈 나머지를 계산합니다. 이 나머지 값에 따라 데이터가 어느 샤드에 저장될지 결정합니다.
  • 데이터 저장 : 데이터의 특정 속성 값을 모듈러 연산한 나머지에 따라 해당하는 샤드에 데이터를 저장합니다.
  • 데이터 조회 및 처리 : 데이터 조회나 작업 시에는 해당하는 속성 값을 모듈러 연산하여 어느 샤드에서 데이터를 가져올지 결정합니다.

샤딩

데이터베이스 관리에서 사용되는 기술로, 대량의 데이터를 작은 조각으로 나누는 것을 말합니다. 이를 통해 데이터베이스의 성능을 향상시키고 확장성을 높일 수 있습니다.

예를 들자면 한 회사가 수백만 명의 사용자 정보를 저장하는 데이터베이스를 운영하고 있다고 가정해 보면 데이터베이스는 사용자의 이름, 이메일 주소, 비밀번호 등을 포함합니다. 모든 사용자 데이터를 하나의 데이터 베이스에 저장한다면, 조회나 갱신 작업이 복잡해질 수 있으며 데이터베이스의 성능 문제가 발생할 수 있습니다.

샤딩 동작 방식

  1. 샤드 키 선택 : 먼저, 데이터를 어떻게 분할할지 결정하는 샤드 키를 선택합니다. 이 키는 데이터의 분배와 조회 시 어떤 샤드에 접근해야 하는지를 결정하는 역할을 합니다. 보통은 데이터의 고유한 식별자인 사용자 ID, 제품코드, 지역 등이 샤드 키로 사용됩니다.
  2. 샤드 생성 : 선택한 샤드 키를 기반으로 여러 개의 샤드를 생성합니다. 각 샤드는 독립적인 서버나 데이터베이스 인스턴스로 운영됩니다.
  3. 데이터 저장 : 데이터를 샤드로 분할하여 저장합니다. 예를 들어, 사용자 데이터의 경우 사용자 ID에 따라 샤드로 분배됩니다. 데이터를 저장할 때는 샤드 키를 해싱하여 어떤 샤드에 저장할지 결정합니다.
  4. 데이터 조회 및 갱신 : 데이터를 조회하거나 갱신할 때는 해당 데이터의 샤드 키를 기반으로 어떤 샤드에 접근해야 하는지 판단한 후, 해당 샤드에서 작업을 수행합니다.
  5. 조인 및 쿼리 처리 : 여러 샤드에 걸쳐 있는 데이터를 사용하여 복잡한 쿼리나 조인 작업을 수행해야 할 경우, 각 샤드에서 필요한 데이터를 가져와서 클라이언트나 중앙 데이터베이스에서 병합하여 결과를 생성합니다. 이때 데이터의 일관성과 효율성을 유지하는 것이 중요합니다.
  6. 부하 분산 : 각 샤드는 독립적으로 운영되기 때문에 부하가 균등하게 분산되어야 합니다. 어떤 샤드가 다른 샤드보다 많은 트래픽을 처리하는 "핫 스팟" 문제를 방지하기 위해 관리가 필요합니다.
  7. 확장성 : 시스템의 부하가 증가할 경우, 샤드를 추가하거나 확장하는 것이 가능합니다. 이는 데이터베이스 시스템의 확장성을 높여줍니다.
  8. 데이터 무결성 : 샤딩된 환경에서 데이터 무결성을 유지하는 것은 중요합니다. 트랜잭션 처리, 병합 작업 등을 통해 데이터의 정확성과 일관성을 유지해야 합니다.
728x90

'BackEnd > 더 깊은 데이터베이스 지식' 카테고리의 다른 글

CAP 이론  (0) 2023.09.05
데이터 레플리케이션  (0) 2023.08.27
인덱스와 그 작동원리  (1) 2023.08.23