파티셔닝(Partitioning)은 데이터베이스를 여러 부분으로 분할하는 것이다.
수평 분할(horizontal partitioning)은 하나의 테이블의 각 행을 다른 테이블에 분산시키는 것이다.
샤딩(Sharding)이란 대용량의 데이터를 처리하기 위해 테이블을 수평 분할하여 데이터를 분산 저장하고 처리하는 것이다.
이때 수평 분할된 작은 테이블을 샤드(shard)라고 한다.
테이블별로 서버를 나누는 방식이다.
구현이 간단하고, 전체 시스템에 큰 변화가 필요 없다는 장점이 있다.
하나의 feature가 점점 거대해지는 경우 서버를 분리하는 방식이다.
예시로 유저나 년도 별로 분리한다. 주의 사항으론 데이터를 나누는 방법이 예측 가능 해야 한다.
엔티티를 해쉬함수에 넣어서 나오는 값을 이용해서 샤드를 정하는 방식이다.
샤드의 수를 늘리기 위해 해쉬함수를 변경하는 작업이 자원소모가 크다는 단점이 있다.
파티셔닝 메커니즘을 제공하는 추상화된 서비스를 만들어 사용하는 방식이다.
수직 분할(vertical partitioning)은 테이블의 일부 열을 빼내는 형태로 분할한다.
분할 기법은 여러가지가 있지만 자주 사용되는 건 네 가지 정도가 있다.
분할은 분할 키(partitioning key)를 사용한다.
분할 키 값의 범위를 기준으로 분할한다.
값 목록에 파티션을 할당하고, 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
예시로 국가 컬럼에 일본, 미국, 한국, 중국 이 있다면 미국을 빼내고 동북?? 아시아 파티션을 만들 수 있다.
해시 함수를 사용하여 분할한다.
위 기법을 결합하여 사용한다.
참고