在App Engine文档(https://cloud.google.com/appengine/docs/python/ndb/transactions)中,它说:“如果交易与其他交易“碰撞”,它将失败; NDB会自动重试此类失败的交易,几次。”
这句话的意思对我来说不是很清楚。如果事务A首先开始,然后事务B在A的操作中间开始,这是否意味着A和B都将失败并重试?还是只有B失败,而A继续?
另外,还有一个相关的问题:是否有某些情况下交易会部分完成然后回滚?还是每个交易尝试都没有机会完全进入功能,直到它有机会完成功能?
谢谢!
最有可能的是,其中一项交易将成功而另一项交易将失败(并被重试),但是您无法提前告知哪一个交易;这是也有可能是两个可能会失败(并分别重新尝试)。
是的,fail
确实是一般意思partly progresses but then gets rolled back
。这是一种“乐观并发”的安排,而不是基于先占的安排locking
。
请记住,通常会在许多分布式计算机上请求潜在冲突的事务-通过“乐观并发”(检测冲突并回滚那些无法彻底完成的冲突)以外的任何东西来协调它们是不可行的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句