샤딩

내위키
Dennis (토론 | 기여)님의 2020년 1월 13일 (월) 09:19 판

Sharding.

데이터베이스를 수평으로 확장하는 기법 중 하나다.

데이터베이스의 능력을 확장하는 방법은 크게 수직적 방법과 수평적 방법이 있다. 수직적인 방법은 물리적인 서버의 개수는 그대로 두고 서버의 능력을 확장하는 것이다 즉 하드웨어 업그레이드 하든가 저장장치를 더 큰 것을 바꾸든가 하는 것이다. 반면 수평적인 확장 방법은 물리적인 서버의 갯수를 늘려서 서버의 부하를 분산시키는 방법이다. 수평적인 확장 방법은 다시 크게 두 가지 방법으로 나뉘는데 하나는 수직 파티셔닝(vertical partitioning)이고 다른 하나는 수평 파티셔닝이다. 둘 다 덩치 큰 하나의 테이블을 두 개 또는 그 이상으로 쪼개서 분산시키는 것이다. 따라서 수직 파티셔닝은 스키마에 변화가 온다.

수직 파티셔닝은 예를 들어 고객 정보 테이블이 고객의 아이디, 이메일 주소, 우편 주소, 전화번호와 같은 정보를 담고 있다면 수직 파티셔닝은 이 중 우편 주소와 전화번호를 별도의 테이블로 분리시키는 식이다. 분리된 테이블은 기존 테이블의 고유 키를 가지고 있으며 이를 통해 JOIN 연산 같은 방법으로 기존 테이블과 결합해서 쓸 수 있을 것이다. 테이블을 스프레드시트와 같은 개념으로 본다면 스프레드시트를 수직으로, 즉 열을 자르는 것이다. 수직 파티셔닝은 테이블의 갯수가 늘어나는 것은 물론 스키마에도 변화가 온다.

반면 수평 파티셔닝은 테이블을 수평으로 자르는 것이다. 즉 스키마 자체는 그대로 두고 레코드를 나눠서 분산 저장하는 거 있다. 예를 들어서 기존의 테이블에 1억 명의 고객 정보가 저장되어 있다면 이를 100만 명 단위로 잘라서 100개 테이블로 만드는 것이다. 그리고 앞으로 새로 저장할 고객 정보들은 적절한 방법을 통해서 이 100개 테이블에 고르게 분산시킬 것이다. 수평 파티셔닝은 스키마는 변하지 않고 테이블의 갯수만 늘어난다.

이러한 파티셔닝은 기본적으로 같은 데이터베이스 안에서 테이블을 쪼개는 방식으로 구현이 되는데 샤딩은 한 발 더 나아가서 아예 데이터베이스를 분리시키는 것이다. 즉 파티셔닝을 통해서 한 개 테이블을 두 개로 분할했을 때 각각의 테이블을 물리적으로 다른 데이터베이스 서버에 배치할 수도 있다.