Python 应用程序引擎NDB事务冲突

Python 应用程序引擎NDB事务冲突,python,google-app-engine,transactions,Python,Google App Engine,Transactions,在appengine文档()中,它说:“如果事务与另一个事务“冲突”,它将失败;NDB会自动重试失败的事务几次。” 这句话的意思我不太清楚。如果事务A先开始,然后事务B在A操作的中间开始,这是否意味着A和B都将失败并重试?还是只有B失败,A继续 另外,还有一个相关的问题:是否存在交易部分完成然后回滚的情况?或者,在有机会完成功能之前,每个事务是否根本不尝试进入该功能 谢谢大家! 最有可能的情况是,一个事务会成功,而另一个事务会失败(并被重新尝试),但您无法提前知道是哪一个;也有可能两者都失败(并

在appengine文档()中,它说:“如果事务与另一个事务“冲突”,它将失败;NDB会自动重试失败的事务几次。”

这句话的意思我不太清楚。如果事务A先开始,然后事务B在A操作的中间开始,这是否意味着A和B都将失败并重试?还是只有B失败,A继续

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


谢谢大家!

最有可能的情况是,一个事务会成功,而另一个事务会失败(并被重新尝试),但您无法提前知道是哪一个;也有可能两者都失败(并分别重新尝试)

是的,
fail
通常意味着
部分进展,但随后被回滚。这是一种“乐观并发”安排,而不是基于先发制人的
锁定


请记住,在许多分布式计算机上通常都会请求潜在冲突的事务——通过“乐观并发”(检测冲突并回滚无法完全完成的冲突)以外的任何方式来协调它们都是不可行的。

感谢您的回复!从您所写的内容来看,乐观并发控制似乎不能保证几个并发请求中的任何一个都能在不中断的情况下完成,而不是在锁定系统中(在锁定系统中,请求将按顺序进行,以保证基线性能水平)。鉴于此,我不太明白你的最后一句话;在一个有许多并发请求的系统中,悲观控制系统的性能似乎优于乐观控制系统。你介意指出我推理中的错误吗?谢谢在一个分布式系统中,有许多几乎同时发生的冲突请求,性能无论如何都会很糟糕——要么是由于多次重试,要么是由于建立分布式锁的巨大开销。这就是为什么,例如,建议按碎片计数器。但在一个基于锁定的系统中,即使在没有需求的情况下,你也会付出同样高昂的代价——交易不会发生冲突——在一个乐观的系统中,你只会在需要的时候很少支付。类比:TCP指数退避;以太网战胜令牌环:-)。