내 질문에 너무 일반적인 것 같지만 누락 된 데이터를 제공 할 준비가되었습니다.생산을위한 MongoDB writeConcern
우리는 소셜 네트워크와 같은 것을 만듭니다. 더 나은 읽기 성능을하고 마스터 인스턴스의 생활을 쉽게하기 위해, 우리는 우리의 replicaSet에
readPreference=secondaryPreferred
을 설정했습니다. 하지만 여기에서 데이터를 읽으려면 보조 인스턴스에 데이터가 기록된다는 보장이 없으므로
w=3
옵션을 설정해야했습니다. 지금까지 모든 것이 작동하는 것처럼 보였지만 내 로컬 replicaSet의 측정 값은 다음 삽입 통계를 보여줍니다.
Inserting 300 objects:
w=1 - 0.10s
w=3 - 1.31s
Insertion 5000 objects:
w=1 - 0.6s
w=3 - 14.6s
질문이 차이가 예상됩니까? 아니면 잘못된 것입니까?
응답 해 주셔서 감사합니다. 실제로이 작업을 수행하기 전에 데이터베이스를 분할 했으므로 아무런 오해가 없습니다. 다음 두 가지 이유로 w = N을 사용할 수 있습니다. 1. 기본 인스턴스에 대한 읽기 요청 수를 줄입니다. 2. 최종 결과가 아닌 강건 함을 유지합니다. 응답에서 중요한 부분은 강력한 일관성이 필요한 작업 일 경우 기본 노드에서 읽는 것입니다. :-) 감사합니다. – inteloid
(2)에 대한 참고 사항 : w = N은 비동기 복제로 인해 보조 노드가 결국 일관성을 유지한다는 사실을 변경하지 않는다는 점에 유의하십시오. w = N으로 방금 쓴 것과 동일한 데이터를 읽으려는 경우 보조 데이터를 일관성있게 읽습니다. 이것이 당신이 접근하는 패턴이라면, 쓰기 및 읽기 순서 대신에 findAndModify를 고려하십시오. 이렇게하면이 작업 시퀀스가 원자 적이며 두 개의 개별 작업보다 빠르게 수행됩니다. –
스레드 A가 레코드를 삽입하고 보조 스레드로부터 승인을 기다리는 경우 보조 스레드에서 읽기와 기본 스레드에서 읽기 때 다른 스레드가 다른 결과를 얻을 수 있습니다. 우리에게는 다소 괜찮습니다. 당분간은 함께 살 수 있다고 생각합니다. findAndModify와 관련하여 웹 응용 프로그램 내에서 코드 논리를 변경하기 때문에 코드를 사용하는 것이 쉽지 않습니다. – inteloid