Sharding & Partitioning

2025. 3. 4. 08:00·Database
반응형

대규모 데이터를 효과적으로 관리하기 위해서는 데이터베이스에서는 샤딩과 파티셔닝 기법을 사용합니다.

두 방법 모두 데이터를 나누는 방식이지만, 적용 방식과 목적에서 차이가 있습니다.

 

이번 포스팅에서는 샤딩과 파티셔닝의 개념을 살펴보고, 각각의 특징에 대해서 알아보겠습니다.


파티셔닝(Partitioning)이란?

파티셔닝은 하나의 데이터베이스 내에서 데이터를 여러 개의 파티션으로 나누는 방식을 말합니다.

물리적으로 하나의 서버 내에서 데이터를 관리하면서 논리적으로 데이터를 분할하는 기법입니다.

 

1-1. 파티셔닝 유형

1. 범위 파티셔닝(Range Partitioning)

- 특정 범위를 기준으로 데이터를 나눕니다.

- 가령, 날짜 기준으로 파티셔닝 하는 걸 예로 들 수 있습니다.

CREATE TABLE orders (
    order_id INT,
    order_date DATE,
    amount DECIMAL(10,2)
) PARTITION BY RANGE (order_date) (
    PARTITION p1 VALUES LESS THAN ('2023-01-01'),
    PARTITION p2 VALUES LESS THAN ('2024-01-01'),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

 

위와 같이 날짜 기준으로 테이블을 생성한다면, 특정 날짜 범위에 해당하는 데이터만 포함된 파티션을 검색하게 됩니다.

파티셔닝 기법을 사용하지 않은 테이블은 전체 테이블을 스캔하므로, 데이터 양이 많을수록 조회 속도가 느려지고 성능이 저하되는 부분을 개선할 수 있습니다.

 

2. 리스트 파티셔닝(List Partitioning)

- 특정 값의 목록을 기준으로 데이터를 나눕니다.

- 가령, 지역별로 파티셔닝 하는 걸 예로 들 수 있습니다.

CREATE TABLE users (
    user_id INT,
    region VARCHAR(50)
) PARTITION BY LIST (region) (
    PARTITION asia VALUES ('Korea', 'Japan', 'China'),
    PARTITION europe VALUES ('France', 'Germany', 'UK')
);

 

리스트도 동일한 개념입니다. 파티셔닝 된 테이블에서 특정 지역의 사용자 데이터를 조회할 경우, 해당 지역이 포함된 파티션만 검색하게 됩니다.

 

3. 해시 파티셔닝(Hash Partitioning)

- 해시 함수를 사용하여 균등하게 데이터를 분산합니다.

- 가령, 사용자 ID를 기준으로 4개의 파티션에 저장하는 걸 예로 들 수 있습니다.

CREATE TABLE customers (
    customer_id INT,
    name VARCHAR(100)
) PARTITION BY HASH (customer_id) PARTITIONS 4;

 

테이블의 데이터를 4개의 파티션으로 나누어 성능을 향상시키고 관리의 유연성을 더 한 DDL입니다.

customer_id 값에 대한 해시 값을 4로 나눈 나머지에 따라 어떤 파티션에 저장할지를 결정하게 됩니다.

 

4. 조합 파티셔닝(Composite Partitioning)

- 두 개 이상의 파티셔닝 기법을 조합하여 사용합니다.

- 가령, 범위 + 해시 파티셔닝을 예로 들 수 있습니다.

CREATE TABLE logs (
    log_id INT,
    log_date DATE,
    server_id INT
) PARTITION BY RANGE (log_date) SUBPARTITION BY HASH (server_id) SUBPARTITIONS 4 (
    PARTITION p1 VALUES LESS THAN ('2023-01-01'),
    PARTITION p2 VALUES LESS THAN ('2024-01-01')
);

 

날짜와 서버 ID를 기준으로 파티셔닝을 진행한 DDL 입니다. 복합 파티셔닝을 통해 조회에 있어 성능과 관리의 유연성을 높이는 구조입니다.

 

1-2. 파티셔닝 장단점

장점 * 특정 조건의 데이터를 조회할 때 빠른 검색 가능

* 백업 및 유지보수 시 특정 파티션만 관리 가능

* 데이터 삭제 시 특정 파티션만 삭제하여 성능 최적화
단점 * 파티셔닝 키를 잘못 선정하면 성능이 저하될 수 있음

* 특정 파티션에 데이터가 집중될 경우 성능 저하 발생

샤딩(Sharding)이란?

샤딩은 하나의 데이터베이스를 여러 개의 물리적 노드(서버)로 분산하는 방식입니다. 여러 개의 데이터베이스 서버를 사용하여 데이터를 분산 저장하는 방법입니다.

 

2-1. 샤딩의 유형

1. 수직 샤딩(Vertical Sharding)

- 테이블의 칼럼을 기준으로 나누는 방식입니다.

 

2. 수평 샤딩(Horizontal Sharding)

- 테이블의 행(row)을 기준으로 데이터를 나누는 방식입니다.

 

3. 하이브리드 샤딩(Hybrid Sharding)

- 수직 및 수평 샤딩을 혼합하여 사용하는 방식입니다.

 

2-2. 샤딩의 데이터 일관성 문제

샤딩을 사용할 경우, 데이터 일관성을 유지하기 어려움이 있을 수 있습니다. 데이터 일관성을 유지함의 어려움은 다음과 같은 예시를 통해 설명할 수 있습니다.

 

1. 분산 트랜잭션 문제 : 여러 샤드에서 트랜잭션이 발생하면 ACID 보장이 어렵습니다.

Atomicity(원자성) : 트랜잭션의 모든 작업이 성공적으로 완료되거나 전혀 수행되지 않아야 함

Consistency(일관성) : 트랜잭션이 완료된 후 데이터베이스가 일관된 상태가 되어야 함

Isolation(격리성) : 동시에 실행되는 트랜잭션이 서로 영향을 미치지 않아야 함

Durability(지속성) : 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 함

 

이러한 특성이 여러 샤드에 걸쳐 분산될 경우, 트랜잭션의 원자성을 보장하기 어렵습니다.

 

2. CAP 이론 적용 : Consistency(일관성), Availability(가용성), Partition Tolerance(분할 내성) 중 두 가지만 선택 가능합니다.

Consistency(일관성) : 모든 노드가 동일한 데이터를 가지고 있어야 함

Availability(가용성) : 모든 요청에 대해 응답을 보장해야 함

Partition Tolerance(분할 내성) : 네트워크 파티션이 발생해도 시스템이 계속 작동해야 함.

 

샤딩에서는 네트워크 분할이 발생할 경우 일관성과 가용성 중 하나를 선택해야 할 수도 있습니다.

 

3. 샤드 간 조인 문제 : 여러 샤드에 걸쳐 데이터를 조회해야 할 경우 애플리케이션 단에서 조인을 수행해야 합니다. 이는 곧 성능 저하를 초래하고, 복잡성을 증가시킬 수 있습니다.

2-3. 샤딩의 운영 최적화 전략

위에서 설명한 데이터 일관성 문제를 극복하기 위해 여러 샤딩의 운영 최적화 전략이 있습니다. 전략은 다음과 같습니다.

 

1. 샤드 리밸런싱(Shard Rebalancing)

- 샤드 간 데이터 불균형을 방지하기 위해 동적 샤드 이동 또는 추가 샤드를 생성합니다.

 

2. 샤드 키 선택 전략

- 샤드 키를 신중하게 선택하여 특정 샤드에 쏠리는 문제를 방지합니다.

 

3. 샤드 프록시 사용

- 샤드 정보를 중앙에서 관리하여 애플리케이션에서 샤딩 로직을 단순화시킵니다.


샤딩 vs 파티셔닝

  파티셔닝 샤딩
데이터 분할 기준 하나의 DB 내에서 분할 여러 개의 DB로 분할
사용 목적 성능 최적화, 관리 편의성 확장성 확보, 부하 분산
트랜잭션 관리 단일 트랜잭션 가능 분산 트랜잭션 문제 발생
운영 및 유지보수 상대적으로 쉬움 복잡함

 

샤딩과 파티셔닝은 대량의 데이터를 효과적으로 관리하는 중요한 기법입니다. 각 기법을 올바르게 적용하면 데이터베이스 성능을 극대화할 수 있습니다. 운영 환경과 데이터 특성에 맞는 적절한 방식을 선택하여 적용하여 성능을 극대화하시길 바랍니다😊

반응형

'Database' 카테고리의 다른 글

View를 활용한 조회 성능 개선  (0) 2025.03.12
Oracle 데이터베이스 스키마(유저) 생성  (0) 2025.03.05
Window11 Oracle Database 설치  (2) 2024.12.14
Error Code: 2013. Lost connection to MySQL server during query  (0) 2024.12.01
Index란?  (3) 2024.11.15
'Database' 카테고리의 다른 글
  • View를 활용한 조회 성능 개선
  • Oracle 데이터베이스 스키마(유저) 생성
  • Window11 Oracle Database 설치
  • Error Code: 2013. Lost connection to MySQL server during query
Hyunily
Hyunily
    반응형
  • Hyunily
    Hyunily
    Hyunily
  • 전체
    오늘
    어제
    • 분류 전체보기 (45)
      • Daily (16)
      • 한화시스템 Beyond (6)
      • CS (3)
      • Database (10)
      • Monitoring (2)
      • Spring (8)
  • 블로그 메뉴

    • 홈
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Hyunily
Sharding & Partitioning
상단으로

티스토리툴바