【问题标题】:Is there any way to get the entity group of the current transaction in Google Datastore?有什么办法可以在 Google Datastore 中获取当前交易的实体组?
【发布时间】:2015-09-05 18:18:31
【问题描述】:

数据存储区自动设置事务的实体组。当我在交易中时,我想知道这是什么设置。详细地说,假设我有以下函数foo 在事务中运行:

@ndb.transactional
def foo():
    bar1()
    bar2()

bar1 对数据存储执行一些操作。它获取、放置、创建实体、运行查询等。由于bar1 在事务中运行,因此它执行的所有操作以及它运行的查询都必须限制在单个实体组中,按照严格执行的要求数据存储 API(假设这不是 XG 事务)。

现在在bar2 中,我想以编程方式确定事务的实体组是什么。我没有任何关于 bar1 中发生的事情的信息。

这可能吗?

主要是为了测试,并了解如何以及何时设置事务的实体组。

我无法从官方文档中找到执行此操作的方法。

【问题讨论】:

    标签: google-app-engine app-engine-ndb google-cloud-datastore


    【解决方案1】:

    它在文档中。查看键和实体组的结构。

    https://cloud.google.com/appengine/docs/python/datastore/entities#Python_Transactions_and_entity_groups

    “一个实体组是一组通过祖先连接到一个实体的实体 共同的根元素。将数据组织成实体组可以 限制可以执行的事务:"

    实体组由键中的父级定义(没有父键的单个实体具有自身的实体组)。

    因此,如果您有密钥,您就有实体组。

    【讨论】:

    • 我想你误会了。我知道文档描述了实体组是什么以及它与交易的关系。我想要的是以编程方式检索正在运行的事务的当前实体组的键。
    • 好吧,实体组是由您在事务中拥有的实体的键定义的。如果你有实体,你就有钥匙。如果您有您知道实体组的密钥 - 不是吗?如果您有 XG(跨实体组事务,则每个不同的父键定义每个实体组。)。实体的 key 属性为您提供密钥。那你有什么问题呢?
    • 在祖先路径上重读cloud.google.com/appengine/docs/python/datastore/…。很清楚实体组的根是什么。
    • 话虽如此,有一种未记录的密钥方法可以使事情变得更容易——称为 root()。 """返回根键。这是自己或最高父级。"""
    • 您仍然错过了这个问题。让我尝试详细说明。假设我有一个在事务中运行的函数foo()。 foo 调用 bar1() 和 bar2()。 bar1 对数据存储执行一些操作。它放置、创建、运行查询等。由于在事务中,这些操作仅限于在单个实体组中。数据存储 API 确保了这一点。现在在 bar2 中,在不了解 bar1 的情况下,我想检索当前实体组是什么(bar1 用于其所有数据存储操作的根实体)。这有助于澄清吗?
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2019-08-07
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多