Redis) 이것이 레디스다 12 - 샤딩 기법

샤딩은 다른 용어로 파티셔닝(Partioning)으로 부른다.
파티셔닝은 각 데이터를 특정 조건에 따라서 서버에 분산 저장하는 기법이다.
샤딩은 동일한 갯수의 하드웨어를 사용할 때 복제에 비해서 더 많은 데이터를 저장할 수 있다.

복제의 경우 마스터 노드에 쓰기 연산이 발생하면 슬레이브 노드에도 쓰기 연산이 발생해야 동기화가 유지된다. 그렇기 때문에 복제를 통해서는 쓰기 성능을 증대시킬 수 없다.
반면 샤딩을 사용하면 하나의 샤드에 하나의 데이터만 존재하므로 쓰기 연산은 해당 샤드에서만 발생하여 더 많은 쓰기 연산을 처리할 수 있다.

  • 수직샤딩

데이터의 성격을 기준으로 논리적 분할을 적용한 것

e.g.) 사용자 정보: 샤드1, 친구 정보: 샤드2

수직샤딩은 데이터의 위치를 서비스 레벨에서 지정하기 때문에 개발 시점에서 저장된 정보를 알고 있어야하기 때문에 애플리케이션의 복잡도가 증가한다.
또한 특정 샤드에 대한 서비스 호출이 증가할 경우 처리 성능 확장을 위해 서비스 수정과 같은 복잡한 처리 과정을 거쳐야한다.

  • 범위 지정 샤딩

특정 키에 대하여 범위를 지정하여 저장될 노드를 결정하는 것

e.g.) 사용자 110,000: 샤드1, 사용자 10,00120,000: 샤드2

범위 지정 샤딩도 결국 수직 샤딩과 같은 문제점을 갖고 있다.

  • 해시 기반 샤딩

키의 해시값을 구하여 해시값에 대한 특정 연산을 통해 키가 저장될 위치를 구하는 방법

e.g.) 샤드번호 = md5(key값) % 샤드의 수

이 경우 데이터의 저장 위치를 애플리케이션 레벨에서 신경 쓰지 않아도 된다.


책이 쓰여질 당시에는 Redis clustering이 구현이 되어있지 않아 그에 대한 내용은 나와있지 않다.

레디스 클러스터 참고: http://redisgate.kr/redis/cluster/cluster.php

Share