La compatibilité de Python 2 n'est plus assurée par la communauté. Nous vous recommandons de migrer les applications Python 2 vers Python 3.

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. Pour en savoir plus sur la mise à jour des entités et des index, consultez l'article Isolation des transactions dans App Engine.

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 elles peuvent être rendues cohérentes à terme par la définition des règles de lecture de 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 des règles de lecture Datastore

Pour améliorer les performances, vous pouvez définir la règle 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 limite d'appel Datastore, qui correspond à la durée maximale, en secondes, pendant laquelle l'application attendra le résultat avant d'abandonner en affichant 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 de 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

Et ensuite ?