분산 원장 기술의 기초 분산 데이터베이스
분산 데이터베이스란?
- 하나의 데이터베이스 관리 시스템으로, 여러 CPU에 연결된 저장장치들을 제어하는 형태의 데이터베이스
물리적으로 떨어져있고 여러 노드들은 네트워크를 통해 연결됨으로, 투명성 확보가 중요

분산 데이터 베이스의 대표적인 3가지 기술
- 클러스터링
- 레플리케이션
- 샤딩
클러스터링
- 데이터 베이스가 서버가 죽으면 어떻게 해야하지?
- 클러스터링은 DB 서버가 죽었을때 가용성을 위해 서버를 여러개로 만드는 방법
- 데이터베이스는 한개이기 떄문에 병목이 존재한다, 비용부담이 크다, 장애 대응에 강하다
- Active-Active 모드, Active-Standby 모드가 있다
- Active-Active 모드
- 클러스터링된 서버를 전부 가동하여 항상 장애에 대응할수있게
- Active-Standby 모드
- 클러스터링된 서버중 일부 클러스터만 가동하고 나머지는 대기
레플리케이션
- 저장된 데이터가 손실되면 어떻게할까?
- 레플리케이션은 데이터베이스 스토리지를 여러개로 사용하는 방법이다
- Master - Slave 구조로 구성 되어있음
- Slave에 단순 백업만 할수있다
- Master에서는 Insert, Update, Delete 같은 작업을, Slave는 Read만 하여 부하 분산이 가능하다
- Master 노드가 죽을시 대응이 힘들며, 각 노드별 동기화 보장이 어렵다
- 부하 분산으로 Read 속도를 높일수있다
샤딩
- 데이터가 너무 많아서 검색 성능이 좋지않다 더 빠르게 안될까?
- 샤딩은 테이블을 나누어 저장하는 방법이다
- 서버의 수평적 확장이 가능하며 스캔 범위가 줄어 쿼리 반응속도가 빨라 진다 (테이블이 나뉘어져있기 때문)
- 한번 나누게되면 원본으로 백업이 힘들며 구성을 잘못하게되면 쿼리 속도가 오히려 늦어진다
- Shard Key에 따라 샤딩 방법이 달라진다

- 해시 샤딩

- 테이블에 ID를 가지고 해싱이후 나누어서 저장
- 고정적인 ID 계산법을 가지고 있어 공간 활용이 떨어지고 이 부분을 수정하지 못한다
- 다이나믹 샤딩

- Locator Service를 통해서 나누어져있는 샤드를 이용가능하다
- Locator Service에는 범위가 지정되어 해당 샤드에 접근하여 이용하기에 의존적이며 수정시 데이터 재배치와 Locator Service또한 바꿔야한다
- 엔티티 샤딩

- 관계 되어 있는 테이블끼리 하나의 샤드에 저장하여 관리
- 관계 되어있지 않은 다른 샤드와 연관이 있는 쿼리 실행시 오히려 효율이 떨어짐