App Engine NDB事务冲突

时间:2014-12-17 04:18:28

标签: python google-app-engine transactions

在App Engine文档(https://cloud.google.com/appengine/docs/python/ndb/transactions)中,它说:"如果交易发生碰撞'与另一个,它失败了; NDB会自动重试此类失败的事务几次。"

这句话的意思对我来说并不完全清楚。如果事务A首先开始,然后事务B在A的操作过程中开始,这是否意味着A和B都将失败并重试?或者只有B失败了,A继续吗?

此外,还有一个相关问题:是否存在部分完成交易然后回滚的情况?或者,在有机会完成该功能之前,每个交易是否都尝试不进入该功能?

谢谢!

1 个答案:

答案 0 :(得分:3)

最有可能的是,其中一个交易会成功而另一个交易失败(并重新尝试),但您无法提前告知哪一个; 也可能两者都可能失败(并单独重新尝试)。

是的,fail通常意味着partly progresses but then gets rolled back。它是一个乐观的并发"安排,而不是基于先发制人的locking

请记住,通常在许多分布式计算机上请求可能存在冲突的事务 - 除了"乐观并发"之外的任何事情都可以协调它们。 (检测冲突并回滚那些无法完全干净的冲突)将是不可行的。

相关问题