[MongoDB] Read Preference

기훈·2024년 3월 16일

MongoDB

목록 보기
23/28

Reflica Set으로 구성된 몽고디비 서버에서 Read에 대한 요청을 어떤 멤버가 처리하게 할 것인지에 대한 옵션이다.

Read Preference의 종류는 다음과 같다.

Secondary 옵션의 문제점?
Secondary의 경우 복제가 완료되지 않아서 지연된 데이터를 보여줄 가능성이 있다.

과연 그것이 문제일까?
이 부분은 요구사항에 따라 다르다. 예를 들어보겠다.
예시1) sns에서 게시물을 업로드
예시1과 같은 경우 모든 유저가 같은 시점에 업로드 된 데이터를 볼 필요가 없다. 이런경우 Read Preference 옵션을 Secondary으로 주면 읽기에 대한 분산이 가능하고 비즈니스적으로도 큰 이슈가 없다.

예시2) 음식배달 어플에서 주문 완료 후 주문내역 확인
예시2와 같은 경우 주문이 완료 된 후 내역이 바로 업데이트 되지 않아 보이지 않다면 유저 입장에서는 당황스러울 것 이다. 이런 경우에는 항상 최신의 데이터를 받아 오도록 Primary 옵션을 주는 것이 좋이 비즈니스 측면에서 좋은 선택일 것이다.

(몽고디비는 분산 데이터베이스에서 데이터가 모든 복제본(replicas)에 걸쳐 결국 일관성을 유지하게 되는 일관성 모델 Eventual Consistency를 따르고 있다)

실제 데이터 Read Preference옵션으로 데이터 조회하기 with python3.12
1. with_options(read_preference=ReadPreference.SECONDARY) 옵션으로 조회하기

2.연결 주소에 ?readPreference=secondary" 옵션 추가하여 조회하기

결과
secondary 노드에서만 조회가 발생하는 것을 볼 수 있다. (초록색 그래프가 read를 의미함)


tip) 최근 파이썬에서 외부 라이브러리?를 설치 할떄 externally-managed-environment라는 에러가 발생한다. 해결방법으로는 가상환경을 실행 후 재설치하면 문제없이 작동한다.("apt 등의 패키지 매니저가 설치한 파이썬 패키지를 pip가 덮어 쓰는 등의 문제를 해소하기 위함"이라고 한다)

0개의 댓글