진짜 개발자
본문 바로가기

Database

Database - 샤딩과 파티셔닝

728x90

이번 포스팅에서는 파티셔닝과 샤딩의 차이에 대해 알아보도록 하겠습니다.

 

 

대규모 트래픽, 데이터를 다루는 곳에서는 확장성을 위해서 샤딩, 파티셔닝을 필수적으로 고려하게 됩니다.

파티셔닝에서는 수평(테이블의 Row를 특정 컬럼의 값을 기준으로 나누는 것)파티셔닝과 수직(컬럼을 여러 테이블로 나누는것)파티셔닝이 존재합니다. 필자는 수평파티셔닝 == 샤딩으로 잘못 인지를 하고있었습니다 ..

 

 

샤딩, 파티셔닝(수평) 차이


위 글에 나온것을 보면 샤딩과 파티셔닝 모두, 큰 데이터를 여러 서브셋으로 나누어 저장하는 기술을 말합니다. 하지만, 샤딩의 경우에는 각 서브셋을 여러 인스턴스에 저장하는 반면, 파티셔닝하나의 인스턴스의 여러테이블에 나누어 저장하는 것을 말합니다.

 

 

샤딩

샤딩은 앞서 말씀드렸듯이 하나의 큰 데이터를 여러 서브셋으로 나누어 여러 인스턴스에 나누어 저장하는 기술을 말합니다.

 

장점

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

 

주의점

  1. 타겟쿼리와 브로드캐스트 쿼리

    샤딩을 하게되면, 여러 샤드 노드들로 데이터가 분산되어 저장이 되는데요, 이때 쿼리에 적절한 샤드키가 포함되지 않는다면, 모든 노드들로 쿼리를 요청(브로드캐스트 쿼리)하고 이를 다시 취합하여 응답을 하게 됩니다. 반대로 쿼리에 적절한 샤드키를 지정한다면, 해당 데이터가 존재하는 인스턴스를 찾아 타겟쿼리를 하게 됩니다.

 

  1. 적절한 샤드키

    샤드키를 잘못 선정하여, 데이터가 한쪽에 치우치게 된다거나, 한쪽에 쿼리가 몰리게 되는 현상이 발생하면 샤딩을 한 의미가 퇴색될것입니다. 따라서, 적절한 샤드키를 선정하여 데이터가 고르고 쿼리를 적절히 분배할 수 있도록 해야합니다.

 

 

 

파티셔닝(수평)

수평파티셔닝의 경우 앞서 말씀드렸듯이, 하나의 큰 데이터를 여러 서브셋으로 나누고 하나의 인스턴스의 여러 테이블로 나누어 저장하는 기술을 말합니다.

 

왜 사용할까?

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

 

  1. 성능

    데이터를 나누어 여러 테이블에 저장하는 것 만으로 성능이 향상됩니다. 바로 인덱스의 크기가 작아지기 때문입니다. 인덱스의 크기가 작아지면 자연스레 인덱스를 통한 조회시간이 줄어들으므로 성능이 향상됩니다.

     

  2. 메모리 효율(성능)

    하나의 테이블이 너무크다면, 그만큼 인덱스의 크기가 커지는데요, 테이블이 너무!! 커져서 인덱스를 모두 메모리에 올려 처리할 수가 없게된다면, 이 또한 성능상 문제가 될것입니다. 따라서 테이블이 너무 큰 경우에 파티셔닝을 한다면, 인덱스도 파편화되기 때문에 메모리를 효율적으로 사용할 수 있게 됩니다.

 

 

 

'Database' 카테고리의 다른 글

Database - 설계 및 구축 프로젝트  (19) 2019.01.23
카티션 곱  (0) 2018.10.14