MongoDB의 일관성 제어 소개
일관성과 관련된 계층
- Single Document
- Single Document에 대한 원자성 보장
- 복제를 통해 HA를 구성하기 때문에 eventually consistent 하다. (언젠가는 어느 한 시점에 일관된 데이터를 보장함)
- Transaction
- Multi-document과 여러 작업에 대한 원자성 보장
- 권장되진 않지만 기능적으로는 존재함
- Replica Set Member
- 동일한 데이터를 여러 멤버에 저장 → HA 구성 → 멤버들에 대한 일관성 제어
- Sharded Cluster Shard
- 데이터 분산이 되어 shard 간에 동일한 데이터를 갖지 않도록 제어
Replica Set에서 데이터를 어떻게 읽고 저장할지는 우리가 결정할 수 있다.
primary에서 write된 후 secondary가 읽어가기 때문에 어느 한 시점에 primary와 secondary의 데이터가 다를 수 있고, primary가 write를 하는 과정에서 서버가 죽게되는 경우에는 secondary로 반영을 다 하지 못하여 롤백 데이터가 발생할 수 있다.
→ 어느 한 시점에 각 멤버가 들고 있는 데이터가 일관되지 않기 때문에 발생하는 문제로, 이를 어떻게 처리하고 받아들일 지 알아보자.
Read Preference
<aside>
✅ Read Preference란?
Read에 대한 요청을 어떤 멤버가 처리하는지 정하는 옵션
</aside>
- 디폴트 : Read도 primary가 처리함
- secondary가 처리하도록 변경 가능
- Read 트래픽을 분산시킬 수 있고, 유일하게 write를 처리하는 primary에 부하가 집중되는 것을 방지할 수 있다.