티스토리 뷰

DB 파티셔닝??

대용량 데이터를 처리하는데 있어서 매우 중요한 기술로서 대용량 데이터를 분할해서 저장하고, 분산 처리할 수 있는 방식을 뜻한다. 즉, 대용량 데이터나 인덱스를 작은 단위(Partition)로 나누어 관리하는 것이다.

 

파티셔닝은 데이터의 크기가 너무 커져 디스크 I/O에 대한 비용이 크게 증가할 때 성능을 향상시키기 위해 사용될 수 있다.

물리적으로 데이터 분할이 있지만 DB에 접근하는 애플리케이션 입장에서는 이를 알지 못한다.


"장점"

1. 성능 향상

  • 데이터가 분산되어있기 때문에 Full Scan의 범위가 줄어 성능 향상을 야기한다.
  • 논리적으로는 하나의 테이블이기 떄문에 쿼리문을 변경할 필요가 없다.

2. 높은 가용성

  • 파티셔닝을 사용하면 데이터가 분산 저장되기에 하나의 파티션에 장애가 발생하더라도 전체 시스템에 영향을 미치지 않는다.

3. 관리 용이성

  • 각 파티션을 독립적으로 백업 또는 복구할 수 있다.
  • 개별 파티션 단위의 관리가 가능하다.

"단점"

  • 테이블의 분할되어 관리되기 때문에 JOIN에 대한 비용이 증가한다.
  • 파티션 키 값에 대한 별도의 관리가 필요하다.
  • 인덱스와 테이블을 별도로 파티셔닝할 수 없다.

종류

1. 수평(horizontal) 파티셔닝

테이블을 수평기준, 행 기준으로 분리하는 것이다. 즉, 각 파티션의 스키마는 동일하다.

출처:https://learn.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning

수평 파티셔닝에서 가장 중요한 것은 나누는 기준이 되는 Key이다. 설정된 키는 분할된 데이터베이스에 데이터가 가능한 한 균등하게 분산, 처리되도록 해야 한다. 즉, 어떤 파티션이 독단적으로 커지게되는 키 설정은 지양해야하는 것이다.

 

수평 파티셔닝을 하게되면 데이터의 개수가 작아지게되고 이에 따라 인덱스의 크기가 작아지기에 자연스레 성능은 향상되게 된다. 

하지만 테이블 구조가 복잡해지고, 분산 처리 시 데이터 불일치 문제가 발생할 수도 있다.

 

2. 수직(vertical) 파티셔닝

테이블 수직기준, 열 기준으로 분리하는 것이다

출처:https://learn.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning

.수직 분할의 가장 일반적인 용도는 자주 액세스하는 항목을 가져오는 것에대한 I/O의 비용을 줄이는 것이다.

 

위의 사진을 예로 들자면 물건 데이터를 고객에게 보여줄 때 Name과 Description, Price를 보여주는데 수직 파티셔닝을 통해 보여지지 않는 Stock과 LastOrdered에 대한 조회를 없애버렸기에 성능이 향상되는 것이라고 할 수 있다.

또한 Stock과 LastOrdered는 자주 데이터가 변경되는 컬럼인데 이를 파티셔닝함으로써 Update에 대한 성능도 끌어올릴 수 있고 파티셔닝된 Name, Description, Price 파티션을 캐싱해 둠으로써 애플리케이션의 성능을 끌어올릴 수도 있다.


파티셔닝의 분할 기준

테이블을 나누기 위한 기준인 파티션 키를 설정하는 방법의 종류이다.

 

범위 분할(Range Partitioning)

  • 데이터의 값을 기준으로 일정 범위를 정하고, 그 범위 내의 데이터를 한 파티션에 할당하는 방식이다.
  • 예를 들어 날짜나 금액과 같은 숫자 값을 기준으로 파티션하는 것

목록 분할(List Partioning)

  • 데이터의 값을 목록으로 지정하고, 해당 목록에 해당하는 데이터를 한 파티션에 할당하는 방식이다.
  • 예를 들어 지역이나 계정 유형과 같은 값을 기준으로 파티션하는 것이다.

해시 분할(Hash Partitioning)

  • 데이터의 해시 값을 기준으로 파티션을 나누는 방식이다. 데이터의 값에 대해 일정한 알고리즘을 적용하여 해시 값을 게싼하고, 해당 값을 기준으로 파티션을 나눈다. 
  • 무작위로 분할된 데이터를 처리하는데 효과적이며, 분산 데이터베이스에서 많이 사용된다.

합성 분할(Composite Partitioning)

  • 여러 파티션 키를 조합하여 파티션을 나누는 방식이다.
  • 예를 들어 지역+날씨를 사용하여 파티션할 수 있다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함