홈으로 돌아가기

Uniform DB Sharding: 데이터 분배 및 검색 전략

이 기사는 horizontal scaling을 위한 uniform database sharding의 원리를 설명합니다. 데이터 분배 전략, identifier generation, reference table 관리, 분산 시스템에서 paging을 사용한 검색 쿼리 처리를 다룹니다.

Uniform Sharding: Partitioning Key 없이 데이터를 분배하는 방법
Advertisement 728x90

균등 데이터베이스 샤딩: 데이터 분산 및 쿼리 처리 전략

균등 샤딩은 미리 정의된 파티셔닝 키 없이 데이터를 여러 샤드에 분산하는 데이터베이스의 수평 확장 기법입니다. 비즈니스 로직이 고정 키를 허용하지 않거나 키의 효과가 시간이 지나면서 떨어질 때 유용합니다. 주요 목표는 부하를 균등하게 분산하고 노드 간 레코드 분포를 고르게 유지하는 것으로, 요구사항이 변화하는 시스템에 필수적입니다.

균등 데이터 분산 원리

균등성은 두 가지 주요 방법으로 달성됩니다: 랜덤 샤드 선택 또는 노드 부하 기반 선택. 랜덤 분산은 구현이 간단하지만 샤드 초기 크기가 다르면 불균형을 바로잡지 못합니다. 더 유연한 방법은 현재 레코드 수에 따른 샤드 우선순위를 사용하며, 이를 통해:

  • 불균등한 시작 지점에서도 자동 부하 평준화.
  • 클러스터 내 하드웨어 차이를 우선순위 조정으로 보상.
  • 유지보수나 아카이빙 시 쓰기 제외(예: 우선순위 0).

부하 모니터링을 위해 서비스는 주기적으로 각 샤드의 주요 테이블 크기를 쿼리하고, 오버헤드를 최소화하기 위해 값을 캐시합니다.

Google AdInline article slot

객체 식별자 생성 및 사용

균등 샤딩에서 객체 ID는 샤드 정보를 포함해야 합니다. 예를 들어 숫자 키에 오프셋이나 시드를 내장합니다. 이렇게 하면 특정 ID로 SELECT나 UPDATE 같은 OLTP 작업이 빨라지며, ID에서 샤드를 바로 파악할 수 있습니다. 키 생성 전략은 효율적이어야 합니다:

  • 키 요청 시 한 번에 배치(예: NN개)를 반환해 성능 병목 방지.
  • 테이블별 시드는 샤드 시스템 테이블이나 연결 설정에 저장해 유연 관리.
  • 비즈니스 서비스는 객체 삽입 전 DML 쿼리로 새 키를 가져와 데이터 무결성 보장.

참조 테이블 및 논리적 복제 관리

샤딩 시스템에는 조회 테이블(참조 테이블)이 많습니다. 크기는 작고 업데이트는 드물지만 쿼리 정확성에 필수적입니다. 모범 사례:

  • 참조 테이블을 전용 DB 인스턴스에 저장하고 거기서만 업데이트.
  • 논리적 복제(예: PostgreSQL 기능)로 샤드에 동기화.
  • 샤드 부하 감소와 데이터 일관성 유지, 중복 업데이트 노력 최소화.

분산 환경에서의 데이터 검색 및 페이징

균등 샤딩에서 샤드 키를 모르는 검색은 노드 간 조정이 필요합니다. 날짜 내림차순 정렬된 주문 피드의 3페이지를 가져온다고 가정하면, 코디네이터(프록시나 비즈니스 서비스)가 다음과 같이 처리합니다:

Google AdInline article slot
  • 모든 샤드에 쿼리 브로드캐스트, 페이지 경계 조정: LIMIT은 페이지 크기 * 페이지 번호 + 1, OFFSET은 항상 0.
  • 각 샤드가 LIMIT 내 로컬 정렬 데이터를 반환.
  • 코디네이터가 모든 결과를 병합해 한 번에 전역 정렬.
  • 병합 리스트에서 요청 페이지 추출해 사용자에게 반환.

읽기 일관성을 보장하지만 깊은 페이징 시 메모리 집약적입니다. 완화 방안:

  • 사용자는 깊이 들어가지 않으므로 일반 케이스 최적화.
  • 대용량 내보내기(XLSX/CSV)는 메모리 여유 있는 전용 서비스로 비동기 파일 생성, 순차 처리.

페이징 구현 예시

샤드 A, B에 id 컬럼으로 분산된 테이블 t1을 가정합니다. id 오름차순으로 2개 레코드 1페이지를 요청하면: SELECT id FROM t1 ORDER BY id LIMIT 3 OFFSET 0. 코디네이터가 각 샤드에 보내 병합·정렬 후 페이지 반환. 2페이지는 LIMIT 5(2 * 2 + 1)로 더 많은 데이터 감지하고 "다음 페이지" 버튼 표시. 성능과 일관성 균형, 탐색 깊이에 적응.

주요 요약

  • 균등 샤딩은 부하 분산으로 동적 파티셔닝 키 처리.
  • 객체 ID에 샤드 정보 내장으로 OLTP 속도와 라우팅 향상.
  • 참조 테이블 논리적 복제로 업데이트 오버헤드 감소.
  • 조정 페이징은 메모리 최적화 필요하지만 일반 사용자 흐름에 적합.
  • 대용량 내보내기는 비동기 처리로 핵심 시스템 영향 최소화.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

다음 읽기