readConcern "snapshot"
버전 5.0에서 변경됨
읽기 고려 (read concern) "snapshot"
가 있는 쿼리 는 최근 과거의 특정 단일 점 에 샤드 전체에 나타나는 과반수 이상이 커밋한 데이터를 반환합니다. 읽기 고려 "snapshot"
는 트랜잭션 이 쓰기 고려 (write concern) "majority"
로 커밋되는 경우에만 보장 을 제공합니다.
읽기 고려 "snapshot"
은 다중 문서 트랜잭션에 사용할 수 있으며, MongoDB 5.0부터는 다중 문서 트랜잭션 외부의 특정 읽기 작업에 사용할 수 있습니다.
트랜잭션이 인과적으로 일관적인 세션의 일부가 아닌 경우, 쓰기 고려
"majority"
로 트랜잭션을 커밋하면 트랜잭션 작업은 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.트랜잭션이 인과적으로 일관적인 세션의 일부인 경우, 쓰기 고려
"majority"
로 트랜잭션을 커밋하면 트랜잭션 작업은 트랜잭션 시작 직전의 작업에 인과적 일관성을 제공하는 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.
다중 문서 트랜잭션 외에는 다음과 같은 읽기 작업에 대해 프라이머리 및 세컨더리에서 읽기 고려 "snapshot"
를 사용할 수 있습니다.
다른 모든 읽기 명령은 "snapshot"
을 금지합니다.
운영
읽기 고려를 허용하는 모든 작업의 목록은 읽기 고려를 지원하는 작업을 참조하세요.
스냅샷 격리 제한
읽기 고려 "snapshot"
가 있는 읽기 작업은 읽기 작업의 컬렉션에 대한 동시 삭제 또는 이름 변경 작업이 없는 경우에만 스냅샷 격리를 보장합니다. 대부분의 경우 MongoDB는 읽기 스냅샷보다 먼저 작업이 컬렉션을 제거하는 시기를 감지하고 SnapshotUnavailable
오류를 보고합니다. 이 감지가 불가능한 경우, 스냅샷 생성 시점에 컬렉션이 존재했더라도 읽기 작업에는 삭제되거나 이름이 변경된 컬렉션이 반영됩니다. 이 제한은 다중 문서 트랜잭션 내부 및 외부 작업에 대한 모든 읽기 고려에 적용됩니다.
읽기 고려 및 트랜잭션
다중 문서 트랜잭션은 읽기 고려 "snapshot"
뿐만 아니라 "local"
및 "majority"
도 지원합니다.
참고
개별 작업 수준이 아닌 트랜잭션 수준에서 읽기 문제를 설정합니다. 트랜잭션에 대한 읽기 문제를 설정하려면 트랜잭션 및 읽기 문제를 참조하십시오.
읽기 고려 및 atClusterTime
버전 5.0에 추가.
다중 문서 트랜잭션 외부에서 읽기 고려 "snapshot"
이 있는 읽기는 선택적 매개변수 atClusterTime
을 지원합니다. 매개변수 atClusterTime
을 사용하면 읽기에 대한 타임스탬프를 지정할 수 있습니다. T의 지정된 atClusterTime
으로 읽기 요청을 충족하기 위해 mongod
는 T 시점에 사용 가능한 데이터를 기반으로 요청을 수행합니다.
db.runCommand() 의 응답 또는 Session()
객체에서 작업의 operationTime
또는 clusterTime
를 가져올 수 있습니다.
다음 명령은 읽기 고려 "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
허용 값은minSnapshotHistoryWindowInSeconds
매개변수에 따라 달라집니다.minSnapshotHistoryWindowInSeconds
는 스토리지 엔진이 스냅샷 기록을 유지하는 최소 시간 창(초)입니다.minSnapshotHistoryWindowInSeconds
에 따라 보관된 가장 오래된 스냅샷보다 오래된 atClusterTime 값을 지정하면mongod
에서 오류를 반환합니다.지연된 복제본 세트 노드에 대해
"snapshot"
으로 읽기 연산을 수행하는 경우 반환되는 과반수 커밋 데이터는 오래되었을 수 있습니다.인과적으로 일관된 세션 내에서
"snapshot"
에 대해atClusterTime
을 지정할 수 없습니다.
고정 사이즈 컬렉션의 읽기 고려
버전 5.0부터는 고정 사이즈 컬렉션에서 읽을 때 읽기 고려 "snapshot"
을 사용할 수 없습니다.