CQRS(Command Query Responsibility Segration) 패턴
- 조회(Read)에서의 모델과 업데이트(Create, Update, Delete) 할 때의 모델을 분리하는 아키텍처 패턴
- 장점
- 명령(Command=시스템의 상태를 변경하는 작업)과 조회(Query=시스템의 상태를 조회하는 작업)를 분리하여 성능과 보안성을 높임
- 각 DB에 대해 독립적인 스케일링 가능
- 둘의 관심사 분리를 통해 시스템의 유지 보수와 보안 관리가 용이해짐
- 단점
- 업데이트 모델이 조회 모델에 반영되어야 하는 데에 딜레이가 생겨 데이터의 일관성이 깨질 수 있음
- 시스템의 복잡성을 증가시킴
Replication(복제)
- DB의 데이터를 다른 곳에 물리적으로 복사해두는 기술
- 비동기적으로, 단방향으로만 이루어짐
- Master & Slave DB
- Master DB: 데이터 동시성이 높게 요구되는 트랜잭션을 담당하며 Create, Update, Delete 쿼리 요청 시 Bianary Log를 생성하여 Slave DB로 전달
- Slave DB: Read(select) 쿼리 요청을 담당하며 N개의 Slave DB 구성 가능
- 장점
- 역할 분담을 통해 트래픽 집중 문제 해결
- Master DB에 에러 발생 시 Slave DB를 통해 복구 가능
- 단점
- Slave DB에 반영될 때의 딜레이로 두 서버간의 데이터 불일치 문제가 발생할 수도 있음
- Master DB에 문제가 발생할 경우 Slave DB로 Failover(서버에 이상이 생겼을 때 예비 시스템으로 자동전환되는 기능)해주는 기능 지원 X
파티셔닝(Partitioning)
- DB를 여러 부분으로 분할하는 기법
- 장점
- 데이터 접근의 범위를 줄여 관리가 용이하며 성능 향상
- 전체 데이터의 훼손 가능성이 줄어들어 데이터 가용성 향상
- 훼손 시 partition 별로 복구 가능
- 단점
- 종류
- 수평 파티셔닝: 하나의 테이블의 각 행을 다른 테이블에 분산 → 데이터의 개수가 줄어 성능 향상
- 수직 파티셔닝: 하나의 테이블의 일부 열을 빼내는 형태로 분할 → 자주 사용하는 칼럼을 분리하여 성능 향상