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 et la durée maximale de l'appel dans Python, vous devez les transmettre sous forme d'arguments aux méthodes run(), get(), fetch() et count() de la classe Query ou GqlQuery. Exemple :

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

Étapes suivantes