Datastore 查询中的数据一致性

数据一致性级别

Datastore 查询可以按以下任何一种一致性级别交付结果:

  • 强一致性查询可以保证获得最新的结果,但可能需要更长时间才能完成。
  • 具备最终一致性的查询通常运行速度更快,但有时会返回过时的结果。

在最终一致性查询中,也会按最终一致性访问用于收集结果的索引。因此,此类查询有时可能返回不再符合最初查询条件的实体,而高度一致性查询在事务上始终一致。

Datastore 查询数据一致性

查询返回的结果具有不同级别的一致性保证,具体取决于查询的性质:

  • 祖先查询实体组内的查询)在默认情况下高度一致,但可以通过设置 Datastore 读取政策将其改为最终一致(见下文)。
  • 非祖先查询总是最终一致的。

按键提取实体(也称为“按键查找”)具有高度一致性。

设置 Datastore 读取政策

为了提高性能,您可以设置 Datastore 读取政策以使所有读取和查询最终一致。(API 还可让您明确设置高度一致性政策,但此设置没有实际影响,因为无论政策如何,非祖先查询总是具有最终一致性)。

您还可以设置 Datastore 最后调用期限,这是应用在取消调用并返回错误之前等待 Datastore 返回结果的最长时间(以秒为单位)。默认期限为 60 秒;目前无法设置为更大的值,但您可以将其向下调整,以确保特定操作快速失败(例如,更快地向用户返回响应)。

如需使用 Python 设置 Datastore 读取政策和最后调用期限,请将其作为参数传递给 QueryGqlQuery 类的 run()get()fetch()count() 方法。例如:

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

后续步骤