Datastore 쿼리의 데이터 일관성

데이터 일관성 레벨

Datastore 쿼리는 두 가지 일관성 레벨 중 하나로 결과를 제공합니다.

  • Strong Consistency를 가진 쿼리는 가장 최신 결과를 보장하지만 완료하는 데 더 오래 걸릴 수 있습니다.
  • Eventual Consistency를 가진 쿼리는 일반적으로 더 빠르게 실행되지만 간혹 최신이 아닌 결과를 반환할 수 있습니다.

Eventual Consistency를 가진 쿼리에서는 결과를 수집하는 데 사용되는 색인에 액세스할 때도 eventual consistency가 적용됩니다. 결과적으로 이러한 쿼리는 원래의 기준에 더 이상 일치하지 않는 항목을 반환하는 경우가 있는 반면 strong consistency를 가진 쿼리는 항상 트랜잭션에서 일관적입니다.

Datastore 쿼리 데이터 일관성

쿼리는 각각의 특성에 따라 다양한 레벨의 일관성을 보장하는 결과를 반환합니다.

  • 상위 쿼리(항목 그룹 내 쿼리)는 기본적으로 strong consistency를 갖지만 Datastore 읽기 정책을 설정하여 eventual consistency를 갖도록 구성할 수 있습니다(아래 참조).
  • 상위 쿼리가 아닌 쿼리는 항상 eventual consistency를 가집니다.

'키로 조회'라고도 부르는 키를 사용한 항목 가져오기는 strong consistency를 가집니다.

Datastore 읽기 정책 설정

성능 향상을 위해 모든 읽기 및 쿼리가 eventual consistency를 가지도록 Datastore 읽기 정책을 설정할 수 있습니다. (이 API를 통해 strong consistency 정책을 명시적으로 설정할 수도 있지만 비 상위 쿼리가 정책에 관계없이 항상 eventual consistency를 가지므로 이 설정은 실제 영향을 주지 않습니다.)

Datastore 호출 기한도 설정할 수 있습니다. 이 값은 애플리케이션이 Datastore에서 결과를 반환하고 오류가 발생하여 중단될 때까지 기다리는 최대 시간을 초 단위로 나타낸 것입니다. 기본 기한은 60초이며 현재는 이보다 더 높게 설정할 수 없습니다. 하지만 특정 작업이 빠르게 실패해서 사용자에게 더 빠른 응답을 반환하도록 더 낮게 조정할 수는 있습니다.

Python에서 Datastore 읽기 정책과 호출 기한을 설정하려면 Query 또는 GqlQuery 클래스의 run(), get(), fetch(), count() 메서드에 인수로 전달합니다. 예를 들면 다음과 같습니다.

for result in Employee.all().run(limit=5,
                                 read_policy=db.EVENTUAL_CONSISTENCY,
                                 deadline=5):
  # Body of iterative loop

다음 단계