【问题标题】:Google Datastore Transaction API vs. Datastore API when in a transaction事务中的 Google Datastore Transaction API 与 Datastore API
【发布时间】:2018-07-18 13:20:20
【问题描述】:

两天来,我一直在与 Google Cloud Datastore 交易作斗争。

我不确定在 Google Datastore 事务中是否应该使用 datastore.save 或 transaction.save。

常用代码:

const datastore = new Datastore();
const transaction = datastore.transaction();

场景 1:

transaction.run()
    datastore.save(x)
transaction.commit()

场景 2:

transaction.run()
    transaction.save(x)
transaction.commit()

文档中有一些示例,他们在 transaction.run 和 transaction.commit 中同时使用了事务方法和数据存储方法,但我不知道是否有必要。

Datastore.save 对我来说会更容易,但鉴于有一个方法 transaction.save,这似乎很奇怪。

【问题讨论】:

    标签: node.js google-app-engine transactions google-cloud-datastore


    【解决方案1】:

    如有错误请指正,这是我目前的理解

    如果您想在事务中写入数据存储区,您需要使用事务对象来执行此操作,即 transaction.save & transaction.delete; datastore.save 和 datastore.delete 不会在事务中,即使您将它们放在事务块中。

    如果您想从事务中的数据存储中读取,事务和数据存储对象都可以正常工作。两者都将根据事务开始时拍摄的快照进行读取。

    【讨论】:

      【解决方案2】:

      Datastore 对象是为您的代码创建以连接到您的实体的客户端。而对于 Transaction 对象,您正在创建一个基于 Datastore 客户端的对象,以将逻辑应用于您的查询和更新。

      在您提到的情况下,datastore.save 将应用于对指定对象的插入或更新。 transaction.save 将应用于事务中指定对象的插入或更新,因此应在事务块中使用 transaction.save。

      最后,获取实体应该(如您所述)与这两个对象一起工作,因为它们最终都是数据存储客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2016-12-27
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多