Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

readConcern "snapshot"

이 페이지의 내용

  • 운영
  • 스냅샷 격리 제한
  • 읽기 고려 및 트랜잭션
  • 읽기 고려 및 atClusterTime
  • 고정 사이즈 컬렉션의 읽기 고려

버전 5.0에서 변경됨

읽기 고려 (read concern) "snapshot" 가 있는 쿼리 는 최근 과거의 특정 단일 점 에 샤드 전체에 나타나는 과반수 이상이 커밋한 데이터를 반환합니다. 읽기 고려 "snapshot" 는 트랜잭션 이 쓰기 고려 (write concern) "majority"로 커밋되는 경우에만 보장 을 제공합니다.

읽기 고려 "snapshot"다중 문서 트랜잭션에 사용할 수 있으며, MongoDB 5.0부터는 다중 문서 트랜잭션 외부의 특정 읽기 작업에 사용할 수 있습니다.

  • 트랜잭션이 인과적으로 일관적인 세션의 일부가 아닌 경우, 쓰기 고려 "majority"로 트랜잭션을 커밋하면 트랜잭션 작업은 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.

  • 트랜잭션이 인과적으로 일관적인 세션의 일부인 경우, 쓰기 고려 "majority"로 트랜잭션을 커밋하면 트랜잭션 작업은 트랜잭션 시작 직전의 작업에 인과적 일관성을 제공하는 과반수 이상이 커밋한 데이터의 스냅샷에서 읽기를 보장합니다.

다중 문서 트랜잭션 외에는 다음과 같은 읽기 작업에 대해 프라이머리 및 세컨더리에서 읽기 고려 "snapshot" 를 사용할 수 있습니다.

다른 모든 읽기 명령은 "snapshot"을 금지합니다.

읽기 고려를 허용하는 모든 작업의 목록은 읽기 고려를 지원하는 작업을 참조하세요.

읽기 고려 "snapshot" 가 있는 읽기 작업은 읽기 작업의 컬렉션에 대한 동시 삭제 또는 이름 변경 작업이 없는 경우에만 스냅샷 격리를 보장합니다. 대부분의 경우 MongoDB는 읽기 스냅샷보다 먼저 작업이 컬렉션을 제거하는 시기를 감지하고 SnapshotUnavailable 오류를 보고합니다. 이 감지가 불가능한 경우, 스냅샷 생성 시점에 컬렉션이 존재했더라도 읽기 작업에는 삭제되거나 이름이 변경된 컬렉션이 반영됩니다. 이 제한은 다중 문서 트랜잭션 내부 및 외부 작업에 대한 모든 읽기 고려에 적용됩니다.

다중 문서 트랜잭션은 읽기 고려 "snapshot"뿐만 아니라 "local""majority"도 지원합니다.

참고

개별 작업 수준이 아닌 트랜잭션 수준에서 읽기 문제를 설정합니다. 트랜잭션에 대한 읽기 문제를 설정하려면 트랜잭션 및 읽기 문제를 참조하십시오.

버전 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 허용 값은 minSnapshotHistoryWindowInSeconds 매개변수에 따라 달라집니다. minSnapshotHistoryWindowInSeconds는 스토리지 엔진이 스냅샷 기록을 유지하는 최소 시간 창(초)입니다. minSnapshotHistoryWindowInSeconds에 따라 보관된 가장 오래된 스냅샷보다 오래된 atClusterTime 값을 지정하면 mongod에서 오류를 반환합니다.

  • 지연된 복제본 세트 노드에 대해 "snapshot"으로 읽기 연산을 수행하는 경우 반환되는 과반수 커밋 데이터는 오래되었을 수 있습니다.

  • 인과적으로 일관된 세션 내에서 "snapshot"에 대해 atClusterTime을 지정할 수 없습니다.

버전 5.0부터는 고정 사이즈 컬렉션에서 읽을 때 읽기 고려 "snapshot"을 사용할 수 없습니다.

돌아가기

"linearizable"