【发布时间】:2012-11-24 07:28:20
【问题描述】:
在应用引擎transactions documentation我发现了以下注释:
注意:如果您的应用在提交交易时收到异常, 这并不总是意味着交易失败。你可以收到 超时、TransactionFailedError 或 InternalError 异常情况 事务已提交并最终将被应用的地方 成功地。尽可能进行数据存储事务 幂等,因此如果您重复交易,最终结果将是 一样的。
这是非常笼统的信息,我无法找到更多详细信息。关于这个问题,我有以下问题:
- 它会影响 NDB 交易吗? NDB documentation 没有 提到它,但我认为这种行为是继承的
- 什么会导致这种情况?
- 多久会发生一次?
- 我可以阻止它,还是降低概率?
- 在这种情况下事务性任务是否排队?
- 这种情况是一个错误,将在未来修复,还是一个我应该习惯的功能?
【问题讨论】:
-
事务并不是 nosql 数据结构的真正特性 - 看看这个答案stackoverflow.com/questions/2212230/transactions-in-nosql
-
关键是让它具有幂等性。那么重复就无所谓了。
-
我在这个领域相对较新,但似乎并不那么容易。有时我需要强制执行唯一性 - 例如考虑用户名。如果我得到一个异常,我可以重试事务,但如果它成功了怎么办。我不知道是谁创造了这张唱片——我或其他线程。在设计正确的解决方案之前,我只需要更多的知识
标签: google-app-engine google-cloud-datastore app-engine-ndb