Google app engine 谷歌NDB只更新特定属性?

Google app engine 谷歌NDB只更新特定属性?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,有没有办法只更新NDB实体上的特定属性 考虑这个例子 实体A拥有以下财产: 财产B 财产C 让我们假设这两个属性目前的值都为1 两个不同的请求试图更新同一实体,并且它们同时发生。 因此,当请求#1和#2检索该实体时,B和C的值为1 现在请求#1尝试更新属性B,以便将值B设置为2并放入数据存储。现在数据存储中的B=2和C=1。 但是,请求#2在内存中有B=1和C=1,当它将C更改为2并放入DB时,它的B=1和C=2将覆盖由请求#1写入的B值 你怎么避开这个?是否有办法只将特定属性写入数据存储?我相

有没有办法只更新NDB实体上的特定属性

考虑这个例子

实体A拥有以下财产: 财产B 财产C

让我们假设这两个属性目前的值都为1

两个不同的请求试图更新同一实体,并且它们同时发生。 因此,当请求#1和#2检索该实体时,B和C的值为1

现在请求#1尝试更新属性B,以便将值B设置为2并放入数据存储。现在数据存储中的B=2和C=1。 但是,请求#2在内存中有B=1和C=1,当它将C更改为2并放入DB时,它的B=1和C=2将覆盖由请求#1写入的B值


你怎么避开这个?是否有办法只将特定属性写入数据存储?

我相信您可能希望查看事务

根据文件:

如果该事务与另一事务“冲突”,则该事务失败;NDB会自动重试此类失败的事务几次。因此,如果重试事务,该函数可能会被多次调用


链接:

它可能会工作,但由于ndb的最终一致性机制,无法保证。如果第二个事务发生在第一个事务之后,它仍然可以获取旧数据并覆盖它。我想没有办法只更新选择性属性?最终的一致性只适用于来自多个实体组的查询。意味着如果你已经可以访问你的数据,你会得到更新的数据。此外,基于密钥的get不受其影响。然后在幕后,我相信改变的财产是唯一真正更新的。您可以通过查看appstats来验证这一点,其中唯一计算的索引写入成本反映在已更改的属性上(不是100%确定)。