본문 바로가기

Studying/Data System Design

파티셔닝 [데이터 중심 애플리케이션 설계 6장]

  1. 파티셔닝
    1. 확장성 (복제와 비슷)
  2. 키-값 데이터 파티셔닝
    1. 키 범위 기준 파티셔닝: 특정 알파벳끼리 한 파티션에 넣는 형식
      1. 범위 스캔에 유리
      2. 특정 기준으로 검색 시, 핫스팟 유발
    2. 키의 해시값 기준 파티셔닝: 키를 해시 함수로 변환하여 분산시키는 파티셔닝
      1. 파티션끼리 균일하게 분산시키는 데 좋다.
      2. 범위 질의를 효과적으로 수행할 수 없다.
      3. 카산드라에서는 키의 첫부분만 해싱하고 나머지 컬럼은 SS테이블로 색인을 사용하여 첫번째 컬럼만 고정하면 나머지 컬럼에는 범위 스캔을 효율적으로 하게 한다.
    3. 핫스팟 완화: 보통 하나의 키에 데이터가 많은 경우
      1. 애플리케이션에서 해결: 키에 임의의 숫자등을 붙여서 분산 시킨다. → 읽기에 오버헤드가 생겨 일부 키에만 적용하는 게 좋다.
  3. 파티셔닝과 보조 색인
    1. 문서 기반 보조 색인 파티셔닝
      1. 문서 id 기준으로 파티셔닝하고 보조 색인도 같은 파티션에 넣는다.
      2. 문서 id 기준으로 검색 시에는 한 파티션에만 질의하면 된다. (특정 차의 색)
      3. 문서 id 지정없이 특정 색인으로 검색 시에는 전체 파티션에 대해 질의해야 한다. (모든 빨간 차)
    2. 용어 기반 보조 색인 파티셔닝
      1. 전역 색인을 만든다. (기본키와 비슷하게)
      2. 원하는 용어 기준으로 검색 시에 해당 파티션만 검색하면 된다.
      3. 단일 문서 쓰기 시 여러 파티션에 영향이 간다.
        1. 비동기로 인해 지연이 발생할 수 있다.
  4. 파티션 재균형화
    1. mod N: (쓰면 안 됨) 대부분 랜덤으로 분산되어 비용이 크다
    2. 파티션 개수 고정: 파티션 개수를 노드 보다 많이 만들어 파티션 단위로 이동 (노드 별로 일부 파티션 이동), 데이터 크기 변동이 심하면 적절한 파티션 설정이 어려움
      1. 범위 파티셔닝을 하면 개수를 고정하면 빈 파티션이 발생하기 쉬워서 사용이 힘듦
    3. 동적 파티셔닝: 파티션에 일정 이상 데이터가 쌓이면 분리하는 방식(반대로 삭제) B트리와 비슷한 구조
      1. 맨 처음에는 파티션이 1개가 되고, 다른 파티션은 유휴 상태인 단점이 있음
    4. 노드 비례 파티셔닝: 노드 당 파티션의 개수를 고정한다.
      1. 새 노드가 추가되면 각 노드당 무작위의 파티션을 분할하고 분할된 파티션을 새 노드에 할당 → 파티션당 불균형이 발생하지만 전체적으로 보면 균형적임
    5. 자동 재균형화와 수동 재균형화
      1. 자동으로 하면 유지보수에 손이 덜 가므로 편리하나 재균형화에 과부하가 발생할 수 있어서 운영에 영향이 있을 수 있으므로 적절히 나눠서 해야한다.
  5. 요청 라우팅
    1. 클라이언트가 아무 노드에 접근하게 하고 해당 노드가 적절히 검색
    2. 클라이언트가 라우팅 계층에 요청하면 라우팅 계층이 적절히 요청
    3. 클라이언트가 모든 노드를 알고 있게 한다.