샤딩 vs 파티셔닝
2018년 10월 14일
둘 다 데이터를 쪼개는 거임.
하나의 테이블에 다 담을 수 없다거나…
아니면 테이블이 아닌 별도의 노드에서 관리하는 경우(redis, kafka 등등)
노드의 트래픽을 분산해서 성능을 향상시키는 이점이 존재.
아래와 같은 데이터가 있다고 가정.1
2
3
4
5
6id | name | hobby
------------------
1 | ygs | sleep
2 | yks | coding
3 | exo | soccer
4 | bud | write
샤딩 (Horizontal Partitioning)
아래와 같이 특정 샤드키를 가지고 쪼개서 저장하는 걸 의미1
2
3
4id | name | hobby
------------------
1 | ygs | sleep
2 | yks | coding
1 | id | name | hobby |
샤드키를 제대로 지정하지 않으면 특정 테이블(혹은 노드)에 데이터가 몰려 핫스팟이 형성됨.
또한 테이블(혹은 노드)가 늘어나거나 줄어들 수도 있으므로 이에 대비해서 샤드키를 잘 선정해야함.
두 개의 테이블에서 데이터를 조회해야할 수도 있으므로 단점으로 작용할 수도 있음.
카프카에서는 이 방식을 파티셔닝이라고 칭함.
파티셔닝 (Vertical Partitioning)
아래와 같이 특정 컬럼들을 쪼개는 걸 의미
1 | id | name |
1 | id | hobby |
자주 조회하는 컬럼을 쪼개는 것도 나쁘지 않음. (혹은 보안 이슈 때문에 쪼개놔야하거나…)
이렇게 해놓으면 조인이나 RDB의 장점을 살리기 힘들거나 더 많은 쿼리를 날려야할 가능성이 있음.
정규화와 비슷해보이는데 정규화가 이미 진행된 테이블에 대해서 진행하는 것임.