Cohérence des données dans les requêtes Datastore

Niveaux de cohérence des données

Les requêtes Datastore peuvent produire des résultats à l'un des deux niveaux de cohérence suivants :

  • Les requêtes fortement cohérentes garantissent l'obtention des résultats les plus récents, mais leur exécution peut prendre plus de temps.
  • Les requêtes cohérentes à terme s'exécutent en règle générale plus rapidement, mais elles peuvent parfois renvoyer des résultats obsolètes.

Dans les requêtes cohérentes à terme, les index servant à la collecte des résultats sont également accessibles avec une cohérence à terme. Par conséquent, ces requêtes peuvent parfois afficher des entités qui ne correspondent plus aux critères de requête d'origine, alors que les requêtes fortement cohérentes sont toujours cohérentes de manière transactionnelle.

Cohérence des données de requête Datastore

En fonction de leur nature, les requêtes renvoient leurs résultats avec différents niveaux de garantie de cohérence :

  • Les requêtes ascendantes (celles exécutées dans un groupe d'entités) sont fortement cohérentes par défaut, mais vous pouvez les rendre cohérentes à terme en définissant les règles de lecture Datastore (voir ci-dessous).
  • Les requêtes non ascendantes sont toujours cohérentes à terme.

La récupération d'une entité par clé, également appelée "recherche par clé", offre une cohérence forte.

Définir les règles de lecture Datastore

Pour améliorer les performances, vous pouvez définir les règles de lecture Datastore afin que toutes les lectures et requêtes soient cohérentes à terme. L'API vous permet également de définir explicitement des règles de cohérence forte, mais ce paramètre n'aura aucun effet pratique, car les requêtes non ascendantes sont toujours cohérentes, quelles que soient les règles.

Vous pouvez également définir la durée maximale de l'appel à Datastore, qui correspond au délai maximal, en secondes, pendant lequel l'application attend que Datastore affiche un résultat avant d'abandonner en générant une erreur. La durée par défaut est de 60 secondes. Pour le moment, il n'est pas possible d'augmenter cette valeur, mais vous pouvez définir une durée plus courte pour garantir qu'une opération particulière échoue rapidement (par exemple, pour afficher une réponse plus rapide à l'utilisateur).

Pour définir les règles de lecture Datastore en Java, vous construisez une configuration de service Datastore (DatastoreServiceConfig) à l'aide de la classe d'assistance imbriquée DatastoreServiceConfig.Builder et lui transmettez une instance de classe ReadPolicy. L'exemple suivant montre comment définir les règles de lecture, la durée maximale de l'appel, ou les deux :

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);

Étape suivante