在 App Engine 文档 ( https://cloud.google.com/appengine/docs/python/ndb/transactions ) 中,它说:“如果事务与另一个事务‘冲突’,它将失败;NDB 会自动重试此类失败的事务几次。”
这句话的意思我不是很清楚。如果事务A先开始,然后事务B在A运行的中间开始,是否意味着A和B都会失败并重试?还是只有 B 失败,A 继续?
还有一个相关的问题:是否存在事务会部分完成然后回滚的情况?还是每个事务尝试在有机会完成功能之前根本不进入功能?
谢谢!
最佳答案
最有可能的是,其中一个交易会成功,而另一个交易会失败(并重试),但您无法提前判断是哪一个; 也有可能两者都可能失败(并分别重试)。
是的,失败
通常意味着部分进展但随后回滚
。这是一种“乐观并发”安排,而不是基于抢先式锁定
的安排。
请记住,许多分布式机器上通常会请求可能存在冲突的事务——通过“乐观并发”(检测冲突并回滚无法完全完成的冲突)以外的任何方法来协调它们都是不可行的。
关于python - App Engine NDB 事务冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518260/