【问题标题】:Does the Google Cloud Datastore create transactions implicitly?Google Cloud Datastore 是否隐式创建事务?
【发布时间】:2015-09-05 00:43:33
【问题描述】:

在许多数据库中,当一个操作在没有显式启动事务的情况下执行时,数据库会隐式创建一个新事务。

数据存储是否这样做?

如果没有,是否有任何模型可以推理在没有事务的情况下数据如何变化? put、fetch 和 reads 如何在事务之外工作?

如果有,是否有任何关于何时以及如何进行的表征。它总是这样做吗?交易范围是什么?

【问题讨论】:

  • 官方文档说事务是可选的。
  • 你有明确的链接吗?
  • 查看有关 java 事务 python 的官方文档

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


【解决方案1】:

单个实体的突变(放置、删除)将始终是原子的(完全成功或完全失败)。即使您没有提供交易,您也可以将单个突变视为交易。

但是,如果您在同一个非事务性请求中发送多个变更,则整个请求不是原子的。每个突变可能独立成功或失败——一个失败不会导致其他突变被恢复。

【讨论】:

  • 谢谢。你知道单个突变的原子性是否记录在任何地方?
  • 我认为目前没有记录。我将与我们的文档团队核实是否可以添加它。
  • 谢谢,那太好了。我认为数据存储是一个了不起的产品,但我真的无法克服文档的糟糕程度。诸如事务和原子性之类的东西是绝对的基础。在这个级别上发生的事情不应该有任何混淆。
  • 顺便说一句,您能否对stackoverflow.com/questions/29996704 提供一些见解。这是关于数据存储的吞吐量限制。基本上我想知道仅从数据存储读取的事务是否有助于每秒 5 的吞吐量限制?任何帮助将不胜感激。
【解决方案2】:

“事务是数据存储区的一项可选功能;您不需要使用事务来执行数据存储区操作。”

因此,不会在多个实体数据存储操作中为您打开自动事务。

单个实体提交的行为与内部事务相同。因此,如果您要更改多个实体或多次提交它,就好像您每次都打开和关闭一个事务。

【讨论】:

  • 看起来图片比这更复杂。这不是来自原始文档,而是 Dan Sanderson Book, Programming Google App Engine with Python(他也为 Google 工作):“当您创建、更新或删除单个实体时,更改发生在事务中。”
  • 是的,但我以为您问的是涉及多个实体的交易。是的,单个实体与交易走相同的路线。
  • 我更新了答案,提到它适用于多个实体或数据存储操作。在单个实体操作上是的,它的行为与涵盖单个实体操作(放置等)的事务相同,因为在内部这些是多个操作(保存在多个地方以实现冗余等)
  • 你知道这是否是官方文档的一部分吗?
  • 但它有什么含义呢?它只是与应用提交的方式一致(乐观并发等)
猜你喜欢
  • 1970-01-01
  • 2019-08-22
  • 2017-07-08
  • 2020-01-29
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多