我有一个在 Google App Engine 上运行的游戏服务器。我的一些 HTTP 请求导致对不同模型的多次放置。因此,例如,我有一个用户模型和一个游戏模型,一个请求可能会同时写入两者。我正在使用带有 NDB 数据库接口的 python。
有没有办法确保两者都成功,或者甚至一个成功而一个失败,让它们都失败?交易听起来可能是正确的事情,但在阅读文档后我并不清楚,它正在谈论多个请求和冲突。
我确实看到单个 put 可以获取实体列表,但我没有看到任何提及如果一个失败则它们都失败了行为。
我有一个在 Google App Engine 上运行的游戏服务器。我的一些 HTTP 请求导致对不同模型的多次放置。因此,例如,我有一个用户模型和一个游戏模型,一个请求可能会同时写入两者。我正在使用带有 NDB 数据库接口的 python。
有没有办法确保两者都成功,或者甚至一个成功而一个失败,让它们都失败?交易听起来可能是正确的事情,但在阅读文档后我并不清楚,它正在谈论多个请求和冲突。
我确实看到单个 put 可以获取实体列表,但我没有看到任何提及如果一个失败则它们都失败了行为。
是的,交易就是您所需要的。您需要使用 Ancestors 正确构建数据,以便将它们全部写入事务中。
如果任何 put 失败,事务中的 put 都不会被写入。在文档中说得对。
https://developers.google.com/appengine/docs/python/datastore/transactions
您可以使用 XG 事务来更新最多 5 个实体组(如果您不使用父子模型,最多可以更新 5 个对象)。
每个实体组(或对象)都有大约 1 个事务/秒的限制。
ndb 交易:https ://developers.google.com/appengine/docs/python/ndb/transactions xg 交易的限制:https ://developers.google.com/appengine/docs/python/datastore/overview#Cross_Group_Transactions