拆分实体与使用交易

时间:2016-05-17 12:17:39

标签: google-app-engine transactions google-cloud-datastore

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

  1. 用户从网页更新的属性。
  2. 第三方服务对我的应用进行API调用时更新的属性。
  3. 如果我的实体只有第一种类型的属性,我就不会使用事务来进行更新,因为只有一个用户会修改数据。

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

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

    1. 对这个实体的所有看跌期权使用交易(它们发生在很多不同的地方,所以这将是一项相当大的工作),或者
    2. 将实体拆分为两个,其中第一个实体具有第一个类型的属性,这些属性在没有事务的情况下更新,另一个实体具有第二个类型的属性(可以使用事务更新)。
    3. 我无法确定哪个是更好的选择,并希望得到建议。

1 个答案:

答案 0 :(得分:1)

即使实体拆分避免了Web界面修改过的实体的事务可能不像可能期望的那样清晰/简单:

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

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

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