我对google clouddatastore很陌生,我正在阅读一个文档。
(注意:我们不打算使用google appengine,只使用数据存储。)
根据document,数据存储支持事务,但是

If you want to use queries within a transaction,
your data must be organized into entity groups in such a way
that you can specify ancestor filters that will match the right data.

所以我想只要我想使用事务,我就必须创建一些父密钥并将其设置为祖先。父实体下的所有实体都有一个限制,即更新和事务只能每秒执行一次。
不过,我在这里也看到了一个非常简单的插入示例:
https://cloud.google.com/datastore/docs/concepts/entities#datastore-insert-python
with client.transaction():
    incomplete_key = client.key('Task')

    task = datastore.Entity(key=incomplete_key)

    task.update({
        'category': 'Personal',
        'done': False,
        'priority': 4,
        'description': 'Learn Cloud Datastore'
    })

    client.put(task)

它没有指定父级,并且在事务中使用单个根实体,是吗?即使是Transaction page中的示例,也只有“只读事务”的示例显式指定父级。在实际存在的时候,其他人是否只是忽略了父母?
我想知道,如果我可以指定根实体的密钥,我可以在没有实体组的情况下使用事务(即没有大的性能降级),但是文档中没有这样的描述…
如果有人能澄清这一行为,我将不胜感激。谢谢。

最佳答案

确实允许跨多个实体组进行交易(限制为25个实体组per documentation
如果要在事务中使用查询,
注意你引用的文本中的这个关键句子。它是说,任何你想在事务内部发出的“查询”都必须是祖先查询。这是因为非祖先查询最终是一致的,因此事务引擎不可能对任何状态更改进行推理,因此不知道何时失败或成功事务。这并不是说你不能跨实体组进行交易。
它不指定父级,而是在
交易,是吗?
我认为这是另一个困惑的来源。只有子实体指定了父实体来表示它们在哪个实体组中。如果未指定父实体,则该实体是根实体(其父实体是根)。另一种说法是,每个根实体都是它自己的实体组。

关于python - Google Cloud Datastore-是否可以将交易用于单个根实体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45500774/

10-16 09:36