데이터베이스

샤딩(Sharding)과 파티셔닝(Partitioning)의 개념

♠디지털 모험일지♠ 2024. 10. 29. 20:29
728x90
반응형
SMALL

1. 파티셔닝 (Partitioning)

  • 개념:
    파티셔닝은 하나의 데이터베이스 내에서 데이터를 여러 파티션으로 나누어 저장하는 방식입니다. 데이터가 너무 많아지면 한 테이블에 모든 데이터를 저장하는 것이 비효율적이므로, 데이터를 나누어 테이블을 관리하는 방식입니다. 파티셔닝을 통해 특정 조건에 맞는 데이터만 조회하여 데이터 접근 속도를 높이고 성능을 최적화할 수 있습니다.

  • 파티셔닝의 종류:

    • 범위 파티셔닝 (Range Partitioning): 특정 범위에 따라 데이터를 나누는 방법입니다. 예를 들어, 날짜 기준으로 데이터를 분할하여 특정 연도나 월의 데이터를 빠르게 조회할 수 있도록 합니다.
    • 해시 파티셔닝 (Hash Partitioning): 특정 열의 해시 값을 기준으로 데이터를 나누는 방식입니다. 해시 함수에 따라 데이터를 고르게 분산해, 특정 데이터가 몰리는 것을 방지할 수 있습니다.
    • 리스트 파티셔닝 (List Partitioning): 미리 정의된 목록에 따라 데이터를 나누는 방법입니다. 예를 들어, 국가별로 데이터를 나눌 수 있습니다.
    • 라운드 로빈 파티셔닝 (Round-Robin Partitioning): 각 행을 순서대로 파티션에 할당하는 방식입니다. 데이터 분포를 최대한 고르게 할 수 있습니다.
  • 쉽게 설명: 파티셔닝은 큰 테이블을 여러 작은 부분으로 나누어 관리하는 것으로, 예를 들어 한 책을 여러 장으로 나눠 필요한 장만 빨리 찾도록 하는 방식입니다.

  • 예시 코드 (범위 파티셔닝):

    CREATE TABLE orders (
        order_id INT,
        customer_id INT,
        order_date DATE
    )
    PARTITION BY RANGE (YEAR(order_date)) (
        PARTITION p_2021 VALUES LESS THAN (2022),
        PARTITION p_2022 VALUES LESS THAN (2023),
        PARTITION p_2023 VALUES LESS THAN (2024)
    );

    이 예제에서는 orders 테이블을 order_date의 연도를 기준으로 나눴습니다. 2021년, 2022년, 2023년 데이터가 각각 다른 파티션에 저장됩니다. 특정 연도의 데이터를 조회할 때 해당 연도 파티션만 접근하므로 속도가 빨라집니다.

  • 장점:

    • 쿼리 성능 향상: 필요한 파티션만 조회하면 되므로 데이터 접근 속도가 빨라집니다.
    • 유지보수 용이: 특정 파티션만 백업하거나 삭제할 수 있어 관리가 용이합니다.
  • 단점:

    • 복잡성 증가: 파티셔닝 기준을 잘못 설정하면 쿼리가 오히려 느려질 수 있습니다.
    • 설정의 제약: 특정 데이터베이스 시스템에서 지원하지 않거나 제한이 있을 수 있습니다.

2. 샤딩 (Sharding)

  • 개념:
    샤딩은 데이터베이스를 여러 서버에 분산 저장하는 방식입니다. 파티셔닝과 유사하지만, 샤딩은 여러 서버에 데이터를 나누어 저장하므로 대규모 데이터베이스의 수평적 확장이 가능해집니다. 서버에 분산된 각각의 데이터 조각을 샤드(Shard)라고 부릅니다. 이를 통해 서버 부하를 분산하고, 많은 양의 데이터 처리를 효율적으로 할 수 있습니다.

  • 샤딩의 방식:

    • 범위 샤딩 (Range Sharding): 데이터의 범위에 따라 각 서버에 데이터를 분산합니다. 예를 들어, 사용자 ID에 따라 특정 범위의 사용자를 각 서버에 나누어 저장합니다.
    • 해시 샤딩 (Hash Sharding): 특정 열의 해시 값을 기준으로 각 서버에 데이터를 나누어 저장합니다. 해시 함수에 따라 데이터를 고르게 분산하므로, 특정 서버에 데이터가 몰리는 것을 방지할 수 있습니다.
    • 지리적 샤딩 (Geographical Sharding): 지역에 따라 데이터를 분산합니다. 예를 들어, 북미 데이터는 미국 서버에, 유럽 데이터는 독일 서버에 저장하는 방식입니다.
  • 쉽게 설명: 샤딩은 한 도서관에 책이 너무 많아서, 여러 도서관에 책을 분산시켜 관리하는 것과 같습니다. 필요한 도서관으로 가면 그 안의 책들만 빠르게 찾을 수 있죠.

  • 예시 (범위 샤딩):

    • 사용자의 ID에 따라 데이터를 분산하는 방식입니다.
      • UserID 1-10000까지의 사용자는 서버 1에 저장
      • UserID 10001-20000까지의 사용자는 서버 2에 저장
      • UserID 20001-30000까지의 사용자는 서버 3에 저장

    이를 통해 각 서버는 전체 데이터 중 일부만을 저장하게 되어, 특정 범위의 사용자 데이터 조회가 빨라집니다.

  • 장점:

    • 확장성: 데이터가 많아져도 서버를 추가하는 방식으로 확장할 수 있습니다.
    • 성능 향상: 여러 서버에 부하를 분산하여 대량의 데이터를 효율적으로 처리할 수 있습니다.
  • 단점:

    • 관리 복잡성: 각 서버의 데이터를 관리하는 과정이 복잡해지고, 데이터가 분산되어 있어 운영 관리가 어려울 수 있습니다.
    • 샤드 키(Sharding Key) 선택의 중요성: 잘못된 샤드 키를 선택하면 데이터가 특정 서버에 집중될 수 있어 성능이 저하될 수 있습니다.

샤딩과 파티셔닝의 차이점 요약

특징 파티셔닝 (Partitioning) 샤딩 (Sharding)
저장 위치 하나의 데이터베이스 내에서 데이터를 나누어 저장 여러 서버에 데이터를 분산하여 저장
목적 특정 데이터의 조회 성능을 높이고 관리 편의성을 증대 데이터베이스의 수평적 확장 및 서버 부하 분산
기준 데이터의 특정 기준(날짜, 해시값 등)에 따라 나누어 저장 서버별로 특정 기준에 따라 데이터를 분산
확장성 하나의 데이터베이스 내에서 파티션을 추가하여 확장 가능 서버를 추가하여 무한히 확장 가능
관리 복잡성 상대적으로 쉬움 각 서버 관리가 복잡하고, 데이터 일관성 유지가 어려움

요약:
파티셔닝은 데이터베이스 내에서 데이터를 나누어 저장하는 방식으로, 특정 조건에 맞는 데이터를 빠르게 조회하기 위해 사용됩니다. 반면, 샤딩은 여러 서버에 데이터를 분산하여 저장하는 방식으로, 대규모 데이터 환경에서 서버 부하를 줄이고 성능을 높이기 위한 방법입니다. 두 방식은 모두 데이터 처리 성능을 향상시키기 위한 전략이지만, 데이터의 분산 방식과 목적이 다르므로 상황에 맞게 사용해야 합니다.

반응형
SMALL