Skip to content

Latest commit

 

History

History
84 lines (64 loc) · 5.65 KB

Partitioning & Sharding.md

File metadata and controls

84 lines (64 loc) · 5.65 KB

파티셔닝, 샤딩

파티셔닝 : DB 테이블을 열에 대해서 수직으로 혹은 행에 대해 수평으로 나누는 두 가지 방법으로 작은 부분으로 여러 개 나누는 것

샤딩 : 동일한 스키마를 가지고 있는 여러대의 데이터베이스 서버들에 데이터를 작은 단위로 나누어 분산 저장하는 기법

Q) 파티셔닝을 나누는 기준에 대해 설명해주세요.

  • Vertical Partitioning(수직) : Column 기준 장점

    • 자주 사용하는 칼럼을 분리하여 성능을 향상할 수 있다.
    • 같은 타입의 데이터가 저장되어 데이터 압축률을 높일 수 있다.
    • 조회 시 필요 없는 칼럼을 조회하지 않아도 되므로 성능상의 이점이 있다.

    단점

    • 데이터를 찾는 과정이 기존보다 복잡하므로 Latency 증가
  • Horizontal Partioning(수평) : Row 기준 장점

    • 데이터의 개수를 기준으로 나누어 파티셔닝한다.
    • 데이터의 개수와 인덱스의 개수가 줄어들어 성능이 향상된다.

    단점

    • 데이터를 찾는 과정이 기존보다 복잡하므로 Latency 증가

Q-1) 수직 파티셔닝이 정규화와 비슷한 것 같은데, 무슨 차이가 있을까요?

  • 별개로! 정규화는 중복된 데이터를 분리하기 위해 사용, 수직 파티셔닝은 이 테이블에 대해 정규화가 다 끝나고 성능상 이점을 보기 위해 그 때 분리함.

Q-2) 수평 파티셔닝과 샤딩이 비슷한데, 샤딩의 장단점에 대해 설명해주세요.

  • 파티셔닝은 모든 데이터를 동일한 컴퓨터에 저장하지만, 샤딩은 데이터를 서로 다른 컴퓨터에 분산한다는 점에서
    • 장점 : 부하가 분산됩니다.
    • 단점
      • 서버를 나눈 것 == 분산된 서버마다 연결해야하므로 수평 파티셔닝보다 접근시간이 더 오래 걸립니다.
      • 하나의 서버가 고장났을 때, 문제에 대한 대처가 복잡하다. 데이터 무결성이 지켜지지 않는다.

Q) 샤딩을 어떤 기준으로 해야 효율적일까요?

  • 샤딩이란 작은 단위로 나누어 분산 저장하는 기법, 이 때 작은 단위 : 샤드

  • Hash Sharding

    • PK값의 모듈러 연산 결과를 통해 샤드를 결정하는 방식
    • 데이터 개수가 변경될 때 해시 함수도 변경해야하고, 따라서 데이터의 재 정렬이 필요
      • 총 데이터베이스 수가 정해져있을 때 유용
  • Range Sharding

    • PK 값을 범위로 지정하여 샤드를 지정하는 방식
    • Hash Sharding 대비 데이터베이스 증설 작업에 큰 리소스가 소요되지 않는다.
    • 특정한 데이터베이스에만 부하가 몰릴 수 있다는 단점

Q) 어떤 경우에 수직 파티셔닝이 쓰이면 좋을까요?

  • 조회 시 필요없는 칼럼이 있는 경우, 칼럼을 제외해도 되므로 칼럼별로 분류할 때 사용 가능
  • 필요없는 칼럼이 없는 경우, 구할 때 마다 메모리에 값을 올리는 게 부담이 있으므로 자주 사용하는 컬럼만 파티셔닝하여 메모리에 올릴 때 유용유용

Q) 샤딩은 언제 도입을 고려해볼까요?

  • 데이터베이스에 들어온 양이 어마무시하게 많을 때

Q) 파티셔닝 종류에 대해 설명해주세요.

image

List Partitioning 리스트 파티셔닝

  • 관리자가 직접 지정하는 방식으로 잘 설정한 경우에는 빠른 성능이 보장되지만, 잘못 설정된 경우에는 성능 저하됨. (ex 지역별)
  • 많은 SQL에서 해당 칼럼의 조건이 많이 들어오는 경우 유용

Range Partitioning 범위 파티셔닝

  • 데이터 내의 특정 범위 내역을 정하여 파티셔닝 해주는 방법
  • 장점 : 사용하기 쉬움
  • 단점 : 데이터가 균일하게 분포되지 못해서 성능 저하가 생길 수 있다 (ex) 우편 번호, 날짜 등의 데이터에 적합)

Hash Partitioning 해시 파티셔닝

  • 파티션 키(Key)의 해시 값에 의한 파티셔닝
  • range 파티션에서 범위 분포에 대한 단점을 보완
  • hash 함수가 데이터를 균등하게 분포시켜 성능 하락을 방지
  • 데이터의 관리가 어렵다는 단점

Composite Partitioning 복합 파티셔닝

  • 위 파티셔닝 종류 중 두개 이상을 사용하는 방식
  • 큰 파티션에 대한 I/O 요청을 여러 파티션으로 분산할 수 있다.
  • 예를 들면 먼저 범위 분할하고, 다음에 해시 분할 같은 것을 생각할 수 있다.

Q-1) 파티셔닝을 사용한다는 것은 데이터를 분리해서 조회 속도를 향상시키기 위함인데, 해시 파티셔닝은 결국 어떤 파티션에 어떤 데이터가 있는 지 모르니 모든 테이블을 찾는 경우가 생길 것 같습니다. 그럼 해시분할은 왜 사용할까요?

  • 해시 분할의 경우 mod를 사용하기때문에 mod를 이용해서 값을 찾을 수 있고 키를 문자나 날짜로 설정할 수도 있는데 이럴 경우에는 숫자화를 해준다음 mod를 적절하게 사용해서 찾을 수 있습니다.

Q) 파티셔닝의 3가지 이점에 대해 설명해주세요.

  • 테이블 분산을 통해, 쓰기 작업 시 작업이 분산돼 성능이 향상됩니다.
  • 물리적으로 여러 테이블로 분산하여 저장되지만, 사용자는 마치 하나의 테이블에 접근하는 것과 같이 사용
  • 큰 테이블을 나눠 사용하므로, 관리하기 쉽습니다.