Notice: Over the next few months, we're reorganizing the App Engine documentation site to make it easier to find content and better align with the rest of Google Cloud products. The same content will be available, but the navigation will now match the rest of the Cloud products. If you have feedback or questions as you navigate the site, click Send Feedback.

Python 2 is no longer supported by the community. We recommend that you migrate Python 2 apps to Python 3.

Data Consistency in Datastore Queries

Stay organized with collections Save and categorize content based on your preferences.

Data consistency levels

Datastore queries can deliver their results at either of two consistency levels:

In an eventually consistent query, the indexes used to gather the results are also accessed with eventual consistency. Consequently, such queries may sometimes return entities that no longer match the original query criteria, while strongly consistent queries are always transactionally consistent.

Datastore query data consistency

Queries return their results with different levels of consistency guarantee, depending on the nature of the query:

  • Ancestor queries (those within an entity group) are strongly consistent by default, but can instead be made eventually consistent by setting the Datastore read policy (see below).
  • Non-ancestor queries are always eventually consistent.

Fetching an entity by key, which is also called "lookup by key", is strongly consistent.

Setting the Datastore read policy

To improve performance, you can set the Datastore read policy so that all reads and queries are eventually consistent. (The API also allows you to explicitly set a strong consistency policy, but this setting will have no practical effect, since non-ancestor queries are always eventually consistent regardless of policy.)

You can also set the Datastore call deadline, which is the maximum time, in seconds, that the application will wait for Datastore to return a result before aborting with an error. The default deadline is 60 seconds; it is not currently possible to set it higher, but you can adjust it downward to ensure that a particular operation fails quickly (for instance, to return a faster response to the user).

To set the Datastore read policy and call deadline in Python, you pass them as arguments to the run(), get(), fetch(), and count() methods of class Query or GqlQuery. For example:

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

What's next?