MySQL(DB)

[바미] 데이터 파티셔닝

Bami 2024. 6. 20. 09:23
728x90
반응형

DB 파티셔닝(Database Partitioning)

데이터를 효율적으로 관리하고 성능을 향상시키기 위해 데이터를 여러 파티션(부분)으로 나누는 방법입니다. 데이터가 너무 커져서 하나의 테이블이나 인덱스로 관리하기 어려울 때 사용됩니다.

파티셔닝의 장단점

장점

  • 성능 개선 - 특정 파티션에 대해서만 작업을 수행하므로 속도가 빨라짐.
  • 관리 용이 - 파티션 단위로 백업, 복구 가능.
  • 확장성 - 데이터가 증가해도 새로운 파티션을 추가해 확장 가능.

단점

 

  • 복잡성 증가 - 파티션을 관리하기 위한 추가 작업 필요.
  • 잘못된 파티셔닝 - 비효율적인 파티셔닝은 오히려 성능을 저하시킬 수 있음.

 


이제 본격적으로 데이터 파티셔닝의 예를 들어보도록 하겠습니다.

원본 데이터

아래와 같은 형태의 Orders 테이블이 있다고 가정하겠습니다.

OrderId OrderDate CustomerID Amount
1 2022-01-15 100 250.00
2 2022-05-23 101 150.00
3 2023-03-10 102 300.00
4 2023-07-19 103 400.00
5 2024-02-20 104 500.00

범위 파티셔닝 (Range Partitioning)

특정 열의 값을 기준으로 범위를 나누어 파티셔닝 하는 방법을 의미합니다.

여기에선 날짜를 기준으로 2022년 데이터, 2023년 데이터 등으로 나눠보도록 해보죠.

CREATE TABLE Orders (
    OrderID int,
    OrderDate date,
    CustomerID int,
    Amount decimal
)
PARTITION BY RANGE (YEAR(OrderDate)) (
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

 

이렇게 했을 때 데이터는 아래와 같이 나눌 수 있습니다.

p2022 파티션

OrderId OrderDate CustomerID Amount
1 2022-01-15 100 250.00
2 2022-05-23 101 150.00

p2023 파티션

OrderId OrderDate CustomerID Amount
3 2023-03-10 102 300.00
4 2023-07-19 103 400.00

p2024 파티션

OrderId OrderDate CustomerID Amount
5 2024-02-20 104 500.00

장점

  • 간단하고 직관적 - 날짜, 금액 등 연속적인 값을 기준으로 쉽게 이해하고 적용할 수 있습니다.
  • 효율적인 쿼리 성능 - 특정 범위에 대한 검색, 삽입, 삭제 등의 작업이 빠릅니다.
  • 관리가 용이 - 특정 기간의 데이터만 백업하거나 아카이브하는 것이 용이합니다.

단점

  • 데이터 불균형 - 특정 범위에 데이터가 몰리면 일부 파티션에 부하가 집중될 수 있습니다.
  • 확장성 문제 - 새로운 범위의 데이터를 추가할 때 기존 테이블의 재구성이 필요할 수 있습니다.

언제 사용하면 좋은가?

  • 시간 기반 데이터 - 로그 데이터, 주문 기록 등 시간에 따라 자연스럽게 나눌 수 있는 데이터.
  • 연속적 범위의 데이터 - 금액, 연령대 등 연속된 값으로 나눌 수 있는 데이터.

해시 파티셔닝 (Hash Partitioning)

해시 함수에 의해 데이터를 분산시켜 파티셔닝하는 방식입니다. 여기에서는 CustomerID를 기준으로 해시 값을 이용해 4개의 파티션으로 나눠보겠습니다.

CREATE TABLE Orders (
    OrderID int,
    OrderDate date,
    CustomerID int,
    Amount decimal
)
PARTITION BY HASH(CustomerID) PARTITIONS 4;

Partition 1

OrderId OrderDate CustomerID Amount
1 2022-01-15 100 250.00

Partition 2

OrderId OrderDate CustomerID Amount
2 2022-05-23 101 150.00

Partition 3

OrderId OrderDate CustomerID Amount
3 2023-03-10 102 300.00

Partition 4

OrderId OrderDate CustomerID Amount
4 2023-07-19 103 400.00
5 2024-02-20 104 500.00

장점

  • 균등한 데이터 분포 - 해시 함수에 의해 데이터가 고르게 분산됩니다.
  • 확장성 - 파티션 수를 쉽게 조정할 수 있으며, 데이터가 고르게 분포되므로 부하가 적습니다.

단점

  • 비직관적 - 해시 함수의 결과에 따라 데이터가 분산되므로, 특정 파티션에 어떤 데이터가 있는지 예측하기 어렵습니다.
  • 범위 쿼리에 비효율적 - 특정 범위의 데이터를 검색할 때 모든 파티션을 탐색해야 할 수 있습니다.

언제 사용하면 좋은가?

  • 균등한 데이터 분포가 필요한 경우 - 고객 ID, 주문 ID 등 데이터의 균등 분포가 중요한 경우.
  • 고정된 데이터 접근 패턴 - 특정 데이터에 대한 접근이 균등하게 분산되어야 할 때.

리스트 파티셔닝 (List Partitioning)

특정 값들의 리스트를 기준으로 파티셔닝하는 방식입니다. 여기에서는 RegionCode가 있다고 가정하고 이를 기준으로 데이터를 나누어 보겠습니다.

CREATE TABLE Orders (
    OrderID int,
    OrderDate date,
    CustomerID int,
    Amount decimal,
    RegionCode varchar(50)
)
PARTITION BY LIST (RegionCode) (
    PARTITION East VALUES IN ('East'),
    PARTITION West VALUES IN ('West'),
    PARTITION North VALUES IN ('North'),
    PARTITION South VALUES IN ('South')
);

East 파티션

 

OrderId OrderDate CustomerID Amount RegionCode
1 2022-01-15 100 250.00 East

West 파티션

OrderId OrderDate CustomerID Amount RegionCode
2 2022-05-23 101 150.00 West

North 파티션

OrderId OrderDate CustomerID Amount RegionCode
3 2023-03-10 102 300.00 North

South 파티션

OrderId OrderDate CustomerID Amount RegionCode
4 2023-07-19 103 400.00 South
5 2024-02-20 104 500.00 South

장점

  • 유연한 분할 기준 - 특정 값의 집합에 따라 유연하게 데이터를 나눌 수 있습니다.
  • 직관적 관리 - 특정 값에 따라 데이터를 쉽게 분류하고 관리할 수 있습니다.

단점

  • 복잡한 관리 - 관리해야 할 파티션의 수가 많아질 수 있으며, 값의 추가/변경 시 테이블 재구성이 필요할 수 있습니다.
  • 데이터 불균형 - 값의 분포에 따라 파티션에 데이터가 불균형하게 분포될 수 있습니다.

언제 사용하면 좋은가?

  • 명확한 분류 기준이 있는 경우 - 지역, 카테고리 등 명확한 값의 집합으로 데이터를 나눌 수 있는 경우.
  • 비정형 데이터 분포- 특정 값들에 따라 데이터를 분류하고 관리할 때.

컴포지트 파티셔닝 (Composite Partitioning)

컴포지트 파티셔닝은 두 가지 이상의 파티셔닝 방법을 결합하여 사용하는 방법입니다. 예를 들어, OrderDate를 기준으로 범위 파티셔닝을 먼저 하고, 각 범위 내에서 CustomerID를 기준으로 해시 파티셔닝을 적용할 수 있습니다.

CREATE TABLE Orders (
    OrderID int,
    OrderDate date,
    CustomerID int,
    Amount decimal
)
PARTITION BY RANGE (YEAR(OrderDate)) (
    PARTITION p2022 VALUES LESS THAN (2023) (
        PARTITION BY HASH(CustomerID) PARTITIONS 2
    ),
    PARTITION p2023 VALUES LESS THAN (2024) (
        PARTITION BY HASH(CustomerID) PARTITIONS 2
    ),
    PARTITION p2024 VALUES LESS THAN (2025) (
        PARTITION BY HASH(CustomerID) PARTITIONS 2
    )
);

2022 파티션

p2022_1

OrderId OrderDate CustomerID Amount
1 2022-01-15 100 250.00

P2022_2

OrderId OrderDate CustomerID Amount
2 2022-05-23 101 150.00

p2023 파티션

p2023_1

OrderId OrderDate CustomerID Amount
3 2023-03-10 102 300.00

p2023_1

OrderId OrderDate CustomerID Amount
4 2023-07-19 103 400.00

p2024 파티션

p2024_1

OrderId OrderDate CustomerID Amount
5 2024-02-20 104 500.00

장점

  • 다양한 분할 기준 적용 - 두 가지 이상의 파티셔닝 방법을 결합하여 데이터 분포를 최적화할 수 있습니다.
  • 유연한 관리 - 복잡한 데이터 세트를 효과적으로 관리할 수 있습니다.

단점

  • 복잡한 설계 - 두 가지 이상의 파티셔닝 방법을 결합하기 때문에 설계와 관리가 복잡합니다.
  • 성능 문제 - 잘못된 조합을 사용할 경우 오히려 성능이 저하될 수 있습니다.

언제 사용하면 좋은가?

  • 복잡한 데이터 세트 - 다양한 기준으로 데이터를 나누어야 할 때.
  • 다양한 쿼리 패턴 - 여러 가지 쿼리 패턴이 혼합되어 있는 경우.

요약

파티셔닝 방법 장점 단점 사용 시점
범위 파티셔닝 간단하고 직관적, 효율적인 쿼리 성능, 관리 용이 데이터 불균형, 확장성 문제 시간 기반 데이터, 연속적 범위의 데이터
해시 파티셔닝 균등한 데이터 분포, 확장성 비직관적, 범위 쿼리에 비효율적 균등한 데이터 분포가 필요한 경우, 고정된 데이터 접근 패턴
리스트 파티셔닝 유연한 분할 기준, 직관적 관리 복잡한 관리, 데이터 불균형 명확한 분류 기준이 있는 경우, 비정형 데이터 분포
컴포지트 파티셔닝 다양한 분할 기준 적용, 유연한 관리 복잡한 설계, 성능 문제 복잡한 데이터 세트, 다양한 쿼리 패턴

 


 

DB 파티셔닝은 대규모 데이터베이스 관리에서 매우 유용한 기법입니다. 파티셔닝 방법을 잘 선택하고, 적절히 관리하면 데이터베이스 성능을 크게 향상시킬 수 있습니다. 초보자라면 먼저 범위 파티셔닝과 해시 파티셔닝을 이해하고, 이후 리스트 파티셔닝이나 컴포지트 파티셔닝을 학습하는 것을 추천드립니다.

728x90
반응형