我有一个具有两种类型属性的实体:
- 由用户从网页更新的属性
- 当第三方服务对我的应用程序进行API调用时更新的属性
如果我的实体只有第一种类型的属性,我就不会使用事务进行更新,因为只有一个用户会修改数据。
由于第三方服务将通过更新实体进行调用,因此如果用户在API调用的同时进行编辑,则现在存在丢失数据的风险。
似乎为了避免数据丢失,我可以做两件事之一:
- 将交易用于该实体的所有看跌期权(它们发生在很多不同的地方,所以这将是一项相当大的工作),或者
- 将实体一分为二,其中第一个实体具有在没有事务的情况下更新的第一类型的属性,而第二个实体具有第二类型的属性(可以用事务更新)
我很难决定哪一个是更好的选择,希望能给我建议。
即使实体被拆分,也避免了web界面的事务修改后的实体可能不会像所期望的那样清晰/容易:
- 用户可以尝试从不同的会话/窗口/设备修改同一实体
- 由于最终的一致性,在修改后立即显示给用户的信息可能不是数据存储中实际存在的信息
换句话说,在用户web界面上进行交易可能会更安全(而且可能更容易,未来)。
但即使这样做,如果对你的应用程序有意义,拆分实体可能仍然有意义,这是一种常见的技术,请参阅:
- 更新实体';的属性,而不从NDB检索实体
- 谷歌应用引擎数据存储实体。效率和结构
- 重新使用实体';其他不同种类实体的ID——理智的想法