티스토리 뷰

1. 파티셔닝이란?

파티셔닝은 데이터를 여러 파티션 또는 샤드로으로 나누어 저장하는 방법입니다. 각 파티션은 독립적인 저장소이자 처리 단위가 되어, 분산 시스템에서 데이터 작업을 병렬로 수행할 수 있게 해준다.

예:

  • 트위터는 유저 ID 기준으로 트윗을 파티셔닝하여 수억 명의 사용자 트윗을 분산 저장
  • MySQL의 샤딩된 테이블은 서로 다른 서버에 분산되어 트래픽을 나눔

2. 파티셔닝 키 (Partitioning Key) 선택

파티셔닝에서 가장 중요한 결정은 어떤 필드를 기준으로 데이터를 나눌 것인지입니다. 이 필드를 샤딩 키라고 부른다.

좋은 파티셔닝 키의 조건:

  • 균등 분산: 특정 키에 데이터가 몰리지 않아야 함
  • 쿼리 효율성: 자주 조회되는 쿼리가 해당 키로 빠르게 조회 가능해야 함
  • 불변성: 파티셔닝 키는 한 번 저장된 후 바뀌지 않는 것이 좋음

나쁜 키 예시:

  • 가입일: 초기에 가입한 사용자에만 데이터가 몰릴 수 있음
  • 성별: 파티션이 두 개뿐이라면 분산이 제대로 되지 않음

3. 주요 파티셔닝 전략

1) 해시 파티셔닝 (Hash Partitioning)

파티셔닝 키에 해시 함수를 적용해 파티션을 결정.

  • 장점
    • 데이터가 고르게 분산됨
  • 단점
    • 파티션 수가 바뀌면 대부분의 데이터가 이동해야 함
    • 범위 쿼리에 적합하지 않음
  • 사용 예시
    • MongoDB의 기본 샤딩
    • Cassandra의 consistent hashing

2) 범위 파티셔닝 (Range Partitioning)

파티셔닝 키의 값 범위로 파티션을 나눈다.
예: 1

1000, 1001

2000...

  • 장점
    • 범위 기반 쿼리에 유리 (예: 날짜 검색)
  • 단점
    • 특정 범위에 데이터가 몰릴 경우, 핫 파티션 발생 가능
  • 사용 예시
    • 시계열 데이터 저장소 (예: Prometheus, InfluxDB)
      • 로그 수집 시스템

3) 리스트 파티셔닝 (List Partitioning)

  • 파티션 키의 특정 값 집합에 따라 파티션을 정의
  • 예: 국가 = KR → 파티션1, US → 파티션2
  • 장점
    • 카테고리 분류가 명확한 경우 유용
  • 단점
    • 범주가 너무 많아지면 파티션 관리 어려움
  • 사용 예시
    • 멀티테넌시 SaaS 시스템 (테넌트 ID 기준)

4. 파티셔닝 쿼리의 동작

  • 단일 파티션 쿼리
    • 파티션 키를 명시한 조회
    • 효율적이며 빠름
  • 다중 파티션 쿼리
    • 범위 또는 보조 인덱스를 사용하는 쿼리
    • 파티션 전체를 탐색하거나 병렬 조회 + 병합 필요 → 느림

5. 파티션 재조정 (Rebalancing)

운영 중인 시스템에서 파티션 수를 변경해야 할 때, 기존 데이터를 재배치하는 과정을 재조정이라고 한다.

어려운 점:

  • 대량의 데이터를 이동해야 하므로 비용이 큼
  • 시스템의 일관성과 가용성을 유지하면서 재조정해야 함

대표적인 해결책:

  • Consistent Hashing
    • 전체 데이터의 일부만 재배치되도록 설계
  • 미들웨어 라우터 사용
    • 실제 파티션 수와 관계없이 라우팅 테이블에서 처리

6. 파티셔닝과 트랜잭션

단일 파티션 트랜잭션:

  • 한 파티션 내에서만 이루어짐
  • 간단하고 빠름

다중 파티션 트랜잭션:

  • 2PC(2단계 커밋) 같은 분산 트랜잭션 필요
  • 실패 가능성, 성능 저하 등 위험 존재
  • 전략
    • 트랜잭션 범위가 파티션을 넘지 않도록 데이터 모델링
    • 카산드라, DynamoDB 등은 아예 다중 파티션 트랜잭션을 지원하지 않음

7. 보조 인덱스와 파티셔닝

  • 전역 보조 인덱스(Global Secondary Index)는 모든 파티션을 참조해야 하므로 비용이 큼
  • 로컬 인덱스(Local Index)는 파티션 안에서만 동작 → 빠르지만 제약 있음
  • 트레이드오프
    • 전역 인덱스: 검색은 빠르나 업데이트와 확장성이 떨어짐
    • 로컬 인덱스: 확장성은 좋지만 검색 제약

회고

파티셔닝 학습 정리

파티셔닝의 개념

  • 데이터를 여러 파티션(또는 샤드)으로 나눠 분산 저장
  • 확장성과 처리 성능 확보에 유리

좋은 파티셔닝 키의 조건

  • 균등 분산
  • 자주 조회되는 쿼리에 적합
  • 변경되지 않는 값일 것

파티셔닝 전략

  • 해시 파티셔닝: 균등 분산은 잘 되지만 범위 쿼리에 불리
  • 범위 파티셔닝: 범위 기반 쿼리에 유리하나 핫 파티션 우려
  • 리스트 파티셔닝: 명확한 범주가 있을 때 유용, 범주가 많아지면 관리 어려움

쿼리와 파티션

  • 단일 파티션 쿼리는 빠름
  • 다중 파티션 쿼리는 느리고 비용이 큼

파티션 재조정

  • 파티션 수 변경 시 데이터 이동 필요
  • Consistent Hashing이나 라우팅 테이블로 일부만 이동하는 구조 필요

트랜잭션 처리

  • 단일 파티션 트랜잭션은 단순하고 빠름
  • 다중 파티션 트랜잭션은 복잡하고 실패 가능성 있음

보조 인덱스

  • 전역 인덱스: 쿼리는 빠르지만 확장성 떨어짐
  • 로컬 인덱스: 확장성 좋지만 쿼리에 제약 있음
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함