Partitioning

김성윤·2023년 1월 5일
0

큰 Table, Index를 관리하기 쉬운 단위로 분리하는 방법

  • Availability : 물리적 파티셔닝으로 전체 데이터 훼손 가능성 감소, 데이터 가용성 증가
  • Manageability : 큰 테이블을 제거하여 관리 쉽게 함
  • Performance : DML,Query 성능을 향상.

파티션은 데이터를 여러 테이블이나 데이터베이스 등으로 나누는 것
샤딩은 수평적 파티셔닝(Horizontal partitioning)의 일종.

어떤 인스턴스 또는 DB에서 데이터를 찾을지 알기 위한 어떤 논리나 식별자를 이용해 스키마를 여러 인스턴스와 서버에 복제하는 것. 어떤 논리나 식별자는 흔히 샤드 키라고 부른다.

일반적으로 키없는 논리?는 알파벳으로 나누는 건데, A-D 는 1 , E-G는 2 등등..
소비자 데이터는 이 것이 적합한데, 어떤 문자들이 다른 문자들 보다 더 자주 쓰인다는 것을 고려하지 않으면 크기가 다르게 표현될 수 있다.
(내 생각 : Z,X 등등 이런건 잘 많이 안쓰이는데, a,e,i,o,u 같은건 많이 쓰임. 근데 이런걸 똑같이 고려하면 크기가 균등하지 않을 수 있다는 것 같다)

다른 일반적인 방법은 유니크한 키 사용을 보장하는 시스템이나 논리를 쓰는 것이다

범위

  • Range Partitioning : 연속적인 날짜, 숫자로 나눈다.
  • List Partitioning : 특정 파티션에 저장될 Data에 대한 명시적 제어 가능
    ex) [한국, 일본, 중국 -> 아시아][노르웨이, 스웨덴, 핀란드 -> 북유럽]
  • Composite Partitioning : 복합적으로 파티셔닝하는 것
  • Hash Partitioning 해쉬값에 의해 파티션(균등 분할 가능) 관리가 어려움

Horizontal Partitioning 은 데이터 개수를 기준으로 나누는 것

Benefits
데이터의 개수를 기준으로 나누어 Partitioning한다.
데이터의 개수가 작아지고 따라서 index의 개수도 작아지게 된다. 자연스럽게 성능은 향상된다.
Disadvantages
서버간의 연결과정이 많아진다.
데이터를 찾는 과정이 기존보다 복잡하기 때문에 latency가 증가하게 된다.
하나의 서버가 고장나게 되면 데이터의 무결성이 깨질 수 있다.

Vertical Partitioning은 컬럼을 기준으로 나누는 것

테이블의 컬럼을 기준으로 나누어 Partitioning한다.
정규화하는 과정도 이와 비슷하다고 볼 수 있지만 Vertical Partitioning은 이미 정규화된 Data를 분리하는 과정이다.
자주 사용하는 컬럼등을 분리시켜 성능을 향상시킬 수 있다.

출처 :https://stackoverflow.com/questions/20771435/database-sharding-vs-partitioning
https://nesoy.github.io/articles/2018-02/Database-Partitioning
https://seokbeomkim.github.io/posts/partition-and-sharding/
https://lee-mandu.tistory.com/475

profile
Nest.js 백엔드 개발자

0개의 댓글