拆分实体与使用事务
Splitting entities vs. using transactions
我有一个具有两种属性的实体:
- 用户从网页更新的属性。
- 当第三方服务对我的应用进行 API 调用时更新的属性。
如果我的实体只有第一种类型的属性,我不会使用事务来进行更新,因为只有一个用户会修改数据。
由于第三方服务将通过更新实体进行调用,因此如果用户在 API 调用的同时进行编辑,则存在丢失数据的风险.
似乎为了避免数据丢失,我可以做以下两件事之一:
- 对该实体的所有看跌期权使用交易(它们发生在很多不同的地方,所以这将是一项相当大的工作量),或者
- 将实体一分为二,其中第一个实体具有无需事务更新的第一种类型的属性,第二个实体具有第二种类型的属性(可以通过事务更新)。
我无法决定哪个是更好的选择,希望得到建议。
即使实体拆分避免了 web 界面修改实体的交易 可能 不像你 可能 那样 clear/easy预计:
- 用户可能会尝试从不同 sessions/windows/devices
修改同一实体
- 修改后立即显示给用户的信息可能由于最终一致性
而不是数据存储中实际存在的信息
换句话说,在用户网络界面上进行交易可能更安全(并且可能更容易,面向未来)。
但即使这样做,如果对您的应用有意义,拆分实体可能仍然有意义,这是一种常用技术,请参阅:
- updating an entity's property without retrieving the entity from the NDB
我有一个具有两种属性的实体:
- 用户从网页更新的属性。
- 当第三方服务对我的应用进行 API 调用时更新的属性。
如果我的实体只有第一种类型的属性,我不会使用事务来进行更新,因为只有一个用户会修改数据。
由于第三方服务将通过更新实体进行调用,因此如果用户在 API 调用的同时进行编辑,则存在丢失数据的风险.
似乎为了避免数据丢失,我可以做以下两件事之一:
- 对该实体的所有看跌期权使用交易(它们发生在很多不同的地方,所以这将是一项相当大的工作量),或者
- 将实体一分为二,其中第一个实体具有无需事务更新的第一种类型的属性,第二个实体具有第二种类型的属性(可以通过事务更新)。
我无法决定哪个是更好的选择,希望得到建议。
即使实体拆分避免了 web 界面修改实体的交易 可能 不像你 可能 那样 clear/easy预计:
- 用户可能会尝试从不同 sessions/windows/devices 修改同一实体
- 修改后立即显示给用户的信息可能由于最终一致性 而不是数据存储中实际存在的信息
换句话说,在用户网络界面上进行交易可能更安全(并且可能更容易,面向未来)。
但即使这样做,如果对您的应用有意义,拆分实体可能仍然有意义,这是一种常用技术,请参阅:
- updating an entity's property without retrieving the entity from the NDB