Clustering
가용성을 높이기 위해 데이터베이스 서버를 여러 개로 만드는 방법
Replication
실시간 복제본 데이터베이스 서버를 운용하는 것
-
단순 백업 Replication

-
부하 분산을 위한 Replication

-
Master 노드는 쓰기 작업만을, Slave 노드는 읽기 작업만 함
→ DB 요청의 대부분은 읽기 작업이므로, 이를 분산시켜 성능을 높일 수 있음
-
동기화 처리 방식 : 비동기 방식으로 데이터를 동기화

- Master 노드에 쓰기 트랙잭션이 수행됨
- Master 노드는 데이터를 저장하고 트랜잭션에 대한 로그를 파일에 기록(BIN LOG)
- Slave 노드의 IO Thread는 Master 노드의 로그 파일(BIN LOG)를 파일(Replay Log)에 복사
- Slave 노드의 SQL Thread는 파일(Replay Log)를 한 줄씩 읽으며 데이터를 저장
Sharding

데이터베이스 테이블의 row들을 여러 개의 서로 다른 테이블, 즉 파티션으로 물리적으로 분리하는 것( == Horizontal Partitioning)
- 데이터베이스를 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 ‘샤드키’를 기준으로 분리하게 됨
- 주로 application level에서 실행되며 어떤 샤드로 읽기와 쓰기를 전송할지를 정의하는 코드를 가지게 됨(그러나 db에 내장된 샤딩 기능이 있어 db level에서 실행될 떄도 있음)
여러가지 샤딩 방식
Hash Sharding
데이터베이스의 id를 hashing 샤딩하는 것.
- 즉, 간단히 하면 샤드키를 id%num을 하여 정하는 방식
- 그러나 한 번 나눌 개수를 정해놓으면 수정하지 못한다는 단점이 있음

Dynamic Sharding