0

我需要对我的Google数据存储类实施乐观。Google Datastore节点api中是否存在乐观锁定?

我使用自己的密钥而不是生成的密钥,并使用Google数据存储node.js api。

由于insert,update,upsert似乎都被委托给save()方法(按照文档)如果我不小心,我可以轻易地覆盖数据。

所以基本上我必须在做任何插入或更新之前尝试“读取”,然后在调用save()之前必须小心'覆盖'正确的属性。

如果我设法读取,然后正确'覆盖'正确的字段,我仍然需要确保我是该实体的最新作家,所以我需要使用版本/时间戳字段进行某种乐观锁定。我已经在某处看到这是内置的,但它在官方文档中并没有这么明确,在https://googlecloudplatform.github.io/google-cloud-node/#/docs/datastore/0.7.1/datastore?method=insert

有人可以对此有所了解吗?

回答

1

云数据存储事务使用乐观锁定。

方法A:

  • T1 - >开始事务
  • T2 - >读实体X
  • T4 - >写实体X
  • T5 - >提交事务

处理B:

  • T3 - >写实体X

在上述情况下,由于云存储使用乐观锁定,因为实体X被读取和写入之间写入过程A的事务将失败。

注:insertupsertupdate都映射到save,但该法明确以进行正确的类写入沿通过可选的method字符串传递:source

+0

所以它有自己某种内部版本/时间戳,它用于乐观锁?只要确定 - 我应该调用save()作为插入/ upsert /更新所有的地图呢? – 1977

+0

1)是的,它有自己的内部版本号。 2)没有。正如我提到的那样,它不仅仅是映射来保存,而且还传递一个参数,告诉保存要执行的操作类型。如果直接调用save(),则需要确保适当地设置该参数(因此,只需调用正确的insert/update/upsert方法就可以了) –

+0

btw当我通过ds.transaction()获取事务并且然后继续在transaction.run()块内完成我的工作。然后,在最终执行transaction.commit() – 1977