샤딩(Sharding)
-
데이터베이스를 물리적으로 쪼개는 기술
-
동시 접속자( CCU: Concurrent connected User )를 늘릴 수 있으며 물리적 한계의 안정성을 어느정도 보장해줄 수 있음
( DB 중 하나가 망가지거나 없어져도 시스템은 작동할 수 있음 ) -
데이터를 여러 샤드(쪼개진 DB)에 분산시켜 병렬적 처리가 가능해 성능이 향상됨
관리
- 샤딩된 DB들을 균등하게 사용할 수 있도록 설계해야하며, 샤드의 수는 가변적일 수 있음
단점
분산 트랜잭션
-
분산된 데이터 베이스는 분산 트랜잭션을 수행함
( 이 때 트랜잭션 매니저가 생김 ) -
트랜잭션 매니저는 Two-Phase Commit 프로토콜을 사용해 트랜젹선의 ACID를 보장해줌
( Two-Phase Commit: 두번에 걸쳐서 Commit을 진행)
-
Commit이 끝나도 DB의 최신 값으로 갱신되는 타이밍이 조금씩 다를 수 있음
-
분산 트랜잭션은 단일 트랜잭션보다 매우 느림
고려 환경
-
데이터 베이스 크기가 커 단일 서버로 처리하기 어려울 때
-
동시 접속자가 많아 단일 DB 서버의 연결 한계(max_connections)를 초과했을 때
-
현재 DB 성능이 부족해 응답 시간이나 길거나 처리 속도가 느릴 때
-
복잡한 샤드 관리와 모니터링 처리가 가능한 기술적 능력과 자원이 충분할 때
-
분산 트랜잭션 관리를 할 수 있을 때
Hash 함수
- 빠른 데이터 검색을 위해 효율적인 구조로 정보를 저장하는 방식
- 개별 체이닝(Separate Chaining)은 충돌 발생 시 그림과 같이 연결 리스트로 연결(link)하는 방식
- 오픈 어드레싱(Open Addressing) 방식은 충돌 발생 시 그림과 같이 탐사를 통해 빈 공간을 찾아나서는 방식
Consistent Hashing(일관된 해싱) 기법
- 해시 테이블 크기가 조정될 때 평균적으로 Key/N(서버 수와 동일)의 키만 재배치하도록 하는 해시 기술
- S1~3 은 각각 해시 테이블 이라 생각하고 req 는 거기에 저장될 데이터라 생각하면 편하다!
- 만약 이처럼 S2이(해시 테이블) 사라지면 다음 테이블로 최소한의 이동을 하는 것이다!