两天来,我一直在与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方法,这看起来很奇怪。
发布于 2018-02-09 07:35:08
如果我错了,请纠正我,这是我目前对的理解
如果您想要在事务内写入数据存储,则需要使用transaction对象来执行此操作,即transaction.save & transaction.delete;datastore.save & datastore.delete将不在事务中,即使您将它们放入事务块中也是如此。
如果您想从事务内的数据存储中读取数据,那么事务和数据存储对象都可以很好地工作。两者都将基于事务开始时拍摄的快照进行读取。
发布于 2018-02-15 14:06:40
Datastore对象是为代码创建的客户端,用于连接到实体。然而,使用事务对象,您将基于数据存储客户端创建一个对象,以将逻辑应用于查询和更新。
在您提到的情况下,datastore.save将应用于对指定对象的插入或更新。transaction.save将应用于对事务中指定对象的插入或更新,因此,应该在事务块中使用transaction.save。
最后,抓取实体应该(正如您所提到的)与这两个对象一起工作,因为它们最终都是数据存储客户端。
https://stackoverflow.com/questions/48677571
复制相似问题