파티셔닝


저장해야할 정보가 많은 대규모 시스템의 경우, 하나의 DB에 모든 정보를 저장해버리면 응답속도는 아주 느려질 것이다.

그럼 데이터를 분할해서 저장하기위해 2가지 방법을 생각해볼 수 있다.

  1. DATABASE를 여러 대로 분할
  2. TABLE을 여러 대로 분할

 

위에서 첫 번째 방법은 잘 쓰이지 않는데, DB를 여러 대로 분할할 경우 read는 분산 처리할 수 있을지언정 write는 모든 DB에 동기화해야하니 분산 처리가 불가능하기 때문. 그래서 일반적으로 DB 파티셔닝이라하믄 TABLE을 여러 대로 분할하는 방법을 말한다.

 

TABLE을 분할하는 방법은 다시 또 2가지로 나눌 수 있다.

  1. 수평 단편화
  2. 수직 단편화

 

수평 단편화

TABLE을 수평으로 쪼개는 것.

어떤 쪼개진 TABLE에 어떤 데이터가 있는지를 쉽게 파악할 수 있도록하는게 포인트다.

 

수직 단편화

컬럼 단위로 TABLE을 수직으로 쪼개는 것. 특정 컬럼이 빈번하게 참조될 때 해당 기법을 사용한다.

이로 인해, 메모리 캐시에 조금이라도 더 가볍게 올릴 수 있게된다.

 

샤딩 (Sharding)

물리적으로 다른 DB에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법.

이때, Shard Key를 이용해 어떤 DB를 쓸건지 결정한다. (Shard Key를 어떤 식으로 설계할건지도 중요한 이슈)

예를 들면, 아래와 같은 간단한 방법이 있다.

 

 

 

 

참고자료


[1] http://wiki.gurubee.net/pages/viewpage.action?pageId=26742648

[2] https://gmlwjd9405.github.io/2018/09/24/db-partitioning.html