버전 5.0에서 변경되었습니다.
읽기 고려 "snapshot"가 설정된 쿼리는 최근에 있었던 특정 단일 시점에 샤드 전체에 표시된 과반수 이상이 커밋한 데이터를 반환합니다. 읽기 고려 "snapshot"는 트랜잭션이 쓰기 고려 "majority"로 커밋되는 경우에만 보장을 제공합니다.
읽기 고려 "snapshot"은 다중 문서 트랜잭션에 사용할 수 있으며, MongoDB 5.0부터는 다중 문서 트랜잭션 외부의 특정 읽기 작업에 사용할 수 있습니다.
트랜잭션이 인과적으로 일관적인 세션의 일부가 아닌 경우, 쓰기 고려
"majority"로 트랜잭션을 커밋하면 트랜잭션 작업은 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.트랜잭션이 인과적으로 일관적인 세션의 일부인 경우, 쓰기 고려
"majority"로 트랜잭션을 커밋하면 트랜잭션 작업은 트랜잭션 시작 직전의 작업에 인과적 일관성을 제공하는 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.
중요
"snapshot" 읽기는 minSnapshotHistoryWindowInSeconds로 지정된 기간 내에만 수행할 수 있습니다. minSnapshotHistoryWindowInSeconds 이상 지속되는 읽기 작업은 종료될 수 있습니다.
다중 문서 트랜잭션 외에는 "snapshot" 다음과 같은 읽기 작업에 대해 프라이머리 및 세컨더리에서 읽기 고려 (read concern) 를 사용할 수 있습니다.
distinct(샤딩되지 않은 컬렉션에서)
다른 모든 읽기 명령은 "snapshot" 를 금지합니다.
운영
읽기 고려를 허용하는 모든 작업의 목록은 읽기 고려를 지원하는 작업을 참조하세요.
읽기 고려 및 트랜잭션
다중 문서 트랜잭션은 및 "local" 뿐만 아니라 읽기 고려 "snapshot" "majority" (read concern) 도 지원 .
참고
개별 작업 수준이 아닌 트랜잭션 수준에서 읽기 문제를 설정합니다. 트랜잭션에 대한 읽기 문제를 설정하려면 트랜잭션 및 읽기 문제를 참조하십시오.
읽기 고려 및 atClusterTime
다중 문서 트랜잭션 외부에서 읽기 고려 (read concern) "snapshot" 가 있는 읽기는 선택적 매개변수 atClusterTime 을 지원 . 매개변수 를 atClusterTime 사용하면 읽기에 대한 타임스탬프를 지정할 수 있습니다.atClusterTime T의 지정된 mongod 를 사용하여 읽기 요청 충족하기 위해 는 시간 T에서 사용 가능한 데이터를 기반으로 요청 수행합니다. 가 아직 mongod oplog 에서 시간 T에 도달하지 않은 경우, 서비스를 제공하기 위해 대기합니다. 요청.
팁
지연되는 복제본 세트 노드로 읽기가 지정되는 경우 maxTimeMS 를 사용하여 지정된 atClusterTime로 읽기의 대기 시간을 제한할 수 있습니다. maxTimeMS 는 작업이 무기한으로 차단되지 않도록 하고, 대신 mongod 가 지정된 atClusterTime 에 시간 내에 도달하지 못하는 경우 오류를 반환합니다.
db.runCommand()의 응답 또는 Session() 객체에서 연산의 operationTime 또는 clusterTime을 얻을 수 있습니다.
다음 명령은 읽기 고려 (read concern) 를 사용하여 찾기 작업을 "snapshot" 수행하고 클러스터 시간 에 스냅샷 Timestamp(1613577600, 1) 에서 데이터를 읽도록 지정합니다.
db.runCommand( { find: "restaurants", filter: { _id: 5 }, readConcern: { level: "snapshot", atClusterTime: Timestamp(1613577600, 1) }, } )
매개변수 atClusterTime을 제공하지 않으면 mongos 또는 단일 멤버 복제본에서 mongod를 설정하고, 가장 최근에 커밋된 스냅샷의 타임스탬프를 atClusterTime으로 선택한 후 클라이언트에 반환합니다.
트랜잭션 외에는 읽기가 과반수 커밋된 데이터에서 읽도록"snapshot" 보장됩니다.
atClusterTime 고려 사항 및 동작
에 허용되는
atClusterTime값은 매개 변수에 따라 다릅니다.minSnapshotHistoryWindowInSecondsminSnapshotHistoryWindowInSeconds는 스토리지 엔진 스냅샷 기록을 유지하는 최소 시간 창 (초)입니다. 에 따라 보관된 가장 오래된 스냅샷 보다 오래된 atClusterTime 값을minSnapshotHistoryWindowInSecondsmongod지정하면 에서 오류를 반환합니다.지연된 복제본 세트 멤버에 대해 을(를) 지정하지 않고 로 읽기 작업을 수행하면 반환된 과반수 커밋 데이터가 오래될 수
"snapshot"있습니다.atClusterTimeatClusterTime를 지정하면 는 오래된 데이터를 반환하는 대신 지정된 타임스탬프를 기다리지만 읽기가 차단 되거나 시간 초과될 수 있습니다.mongod인과적으로
atClusterTime"snapshot"일관적인 세션 내에서는 에 를 지정할 수 없습니다.
고정 사이즈 컬렉션의 읽기 고려
버전 부터는 고정 5.0 사이즈 컬렉션 에서 읽을 때 "snapshot" 읽기 고려 (read concern) 를 사용할 수 없습니다.