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초이며 현재는 이보다 더 높게 설정할 수 없습니다. 하지만 특정 작업이 빠르게 실패해서 사용자에게 더 빠른 응답을 반환하도록 더 낮게 조정할 수는 있습니다.

자바에서 Datastore 읽기 정책을 설정하려면 중첩된 도우미 클래스 DatastoreServiceConfig.Builder를 사용하여 Datastore 서비스 구성(DatastoreServiceConfig)을 생성하고 여기에 ReadPolicy 클래스 인스턴스를 전달합니다. 다음 예시에서는 읽기 정책, 호출 기한 또는 두 가지를 모두 설정하는 방법을 보여줍니다.

double deadline = 5.0;

// Construct a read policy for eventual consistency
ReadPolicy policy = new ReadPolicy(ReadPolicy.Consistency.EVENTUAL);

// Set the read policy
DatastoreServiceConfig eventuallyConsistentConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy);

// Set the call deadline
DatastoreServiceConfig deadlineConfig = DatastoreServiceConfig.Builder.withDeadline(deadline);

// Set both the read policy and the call deadline
DatastoreServiceConfig datastoreConfig =
    DatastoreServiceConfig.Builder.withReadPolicy(policy).deadline(deadline);

// Get Datastore service with the given configuration
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(datastoreConfig);

다음 단계