ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 샤딩과 파티셔닝
    DataBase 2022. 3. 19. 01:00

    샤딩과 파티셔닝

    대규모 트래픽과 데이터를 다루는 곳에선 많은 양의 데이터가 축적되어 있다보니 하나의 DB 인스턴스로는 읽고 쓰기를 감당할 수 없습니다. 이 경우 여러개의 DB 인스턴스가 필요합니다. 이때 확장성을 위해 샤딩, 파티셔닝을 필수적으로 고려하게 됩니다.

    샤딩과 파티셔닝은 모두 큰 데이터셋을 여러 서브셋으로 나눈다는 공통점이 있습니다. 이런 유사점 때문에 종종 혼용되어 쓰여지기도 합니다. (추후 설명할 예정이지만 sharding = Horizontal partitioning 으로 알고 계신분들이 많은데 이 둘은 다른 개념입니다. horizontal partitioning, vertical sharding 등......)

    샤딩

    • 여러 인스턴스에 여러 서브셋을 저장하는것을 말합니다.

    장점

    • 쿼리(읽기, 쓰기) 를 여러 인스턴스로 분산하여 처리하도록 할 수 있습니다. 이를 통해 성능과 확장성을 얻을 수 있습니다.

    주의점

    1. 타겟쿼리와 브로드캐스트 쿼리
      • 샤딩을 하게되면, 여러 샤드 노드들로 데이터가 분산되어 저장이 됩니다.
      • 이때 쿼리에 적절한 샤드키가 포함되지 않는다면, 모든 노드들로 쿼리를 요청(브로드캐스트 쿼리)하고 다시 취합하여 응답을 하게됩니다.
      • 반대로 쿼리에 적절한 샤드키를 지정한다면, 해당 데이터가 존재하는 인스턴스를 찾아 (타겟쿼리)하게 됩니다.
    2. 적절한 샤드키
      • 샤드키를 잘못 선정하게 되면 데이터가 한쪽에 치우치게 되거나, 쿼리가 몰리게 되는 현상이 발생합니다.
      • 이렇게 되면 싱글 인스턴스를 쓰는것과 차이점이 없게 되어 샤딩을 쓰는 의미가 퇴색됩니다.
      • 따라서 적절한 샤드키를 선정하여 데이터가 고르고 쿼리를 적절히 분배할 수 있도록 해야합니다.

    sharding types

    • Horizontal sharding
      • Row(행) 을 기준으로 데이터를 분산하여 저장하는 방식입니다.
      • 원본 테이블과 같은 스키마를 가지고 있습니다.
      • Horizontal sharding 은 쿼리가 주로 그룹화된 행의 서브셋을 반환하는 경향이 있는 경우에 좋은 방법입니다.
      • 예를들어, 일정 시간 기준의 데이터가 필요하다고 하면 이 경우 이상적으로 사용될 수 있습니다.
    • Vertical sharding
      • Column(열) 을 기준으로 데이터를 분산하여 저장하는 방식입니다.
      • 원본 테이블의 서브셋 격인 스키마를 가집니다.
      • 테이블의 모든 컬럼이 필요한게 아니라 일부 컬럼이 필요한 경우에 유용하게 사용될 수 있습니다.
      • 위의 그림처럼 애플리케이션에서 소비자의 도시만 필요하다던지 이름만 필요하다던지 할 때 해당 샤딩 방식은 유용하게 사용될 수 있습니다.

    파티셔닝

    • 하나의 인스턴스에 여러테이블을 나누어 저장하는 것을 말합니다.

    왜 사용할까?

    샤딩은 여러 인스턴스에 테이블을 나누어 저장하기 때문에 성능상의 이점을 가져올 수 있습니다. 하지만 파티셔닝은 하나의 인스턴스내에서 여러 테이블로만 나누기 만 하는데 왜 사용할까요?

    1. 성능
      • 데이터를 나누어 여러 테이블에 저장하는 것만으로 인덱스의 크기가 작아지기 때문에 성능이 향상됩니다.
        • 인덱스의 크기가 작아지면 자연스레 인덱스를 통한 조회시간이 줄어들기 때문에 성능이 향상됩니다.
    2. 메모리 효율(성능)
      • 하나의 테이블이 너무 크다면, 그만큼 인덱스의 크기가 커집니다.
      • 만약 테이블이 너무 커져 인덱스를 모두 메모리에 올려 처리하지 못한다면 이는 성능의 문제가 됩니다.
      • 따라서 테이블의 크기가 너무 큰 경우에 파티셔닝을 한다면 인덱스도 파편화되기 때문에 메모리를 효울적으로 사용할 수 있게 됩니다.

    파티셔닝도 Horizontal Partitioning 방식과 Vertical Partitioning 방식이 있고 내용은 같습니다.

    파티셔닝과 샤딩의 차이점은 몇개의 인스턴스에 데이터를 나누어 저장하냐 로 구별하시면 됩니다.

    출처

     

    Sharding

    Sharding is the practice of optimizing database systems by separating the rows or columns of a larger database table into multiple smaller tables (shards).

    hazelcast.com

     

    Database sharding vs partitioning

    I have been reading about scalable architectures recently. In that context, two words that keep on showing up with regards to databases are sharding and partitioning. I looked up descriptions but s...

    stackoverflow.com

     

    'DataBase' 카테고리의 다른 글

    트랜잭션 격리수준  (0) 2022.07.21
    MySQL 대소문자 구별  (0) 2022.03.01
    MYSQL GROUP BY  (0) 2021.02.11

    댓글