拆分实体与使用事务

Splitting entities vs. using transactions

我有一个具有两种属性的实体:

  1. 用户从网页更新的属性。
  2. 当第三方服务对我的应用进行 API 调用时更新的属性。

如果我的实体只有第一种类型的属性,我不会使用事务来进行更新,因为只有一个用户会修改数据。

由于第三方服务将通过更新实体进行调用,因此如果用户在 API 调用的同时进行编辑,则存在丢失数据的风险.

似乎为了避免数据丢失,我可以做以下两件事之一:

  1. 对该实体的所有看跌期权使用交易(它们发生在很多不同的地方,所以这将是一项相当大的工作量),或者
  2. 将实体一分为二,其中第一个实体具有无需事务更新的第一种类型的属性,第二个实体具有第二种类型的属性(可以通过事务更新)。

我无法决定哪个是更好的选择,希望得到建议。

即使实体拆分避免了 web 界面修改实体的交易 可能 不像你 可能 那样 clear/easy预计:

  • 用户可能会尝试从不同 sessions/windows/devices
  • 修改同一实体
  • 修改后立即显示给用户的信息可能由于最终一致性
  • 而不是数据存储中实际存在的信息

换句话说,在用户网络界面上进行交易可能更安全(并且可能更容易,面向未来)。

但即使这样做,如果对您的应用有意义,拆分实体可能仍然有意义,这是一种常用技术,请参阅:

  • updating an entity's property without retrieving the entity from the NDB