【问题标题】:app engine datastore transaction exception应用引擎数据存储事务异常
【发布时间】:2012-11-24 07:28:20
【问题描述】:

在应用引擎transactions documentation我发现了以下注释:

注意:如果您的应用在提交交易时收到异常, 这并不总是意味着交易失败。你可以收到 超时、TransactionFailedError 或 InternalError 异常情况 事务已提交并最终将被应用的地方 成功地。尽可能进行数据存储事务 幂等,因此如果您重复交易,最终结果将是 一样的。

这是非常笼统的信息,我无法找到更多详细信息。关于这个问题,我有以下问题:

  1. 它会影响 NDB 交易吗? NDB documentation 没有 提到它,但我认为这种行为是继承的
  2. 什么会导致这种情况?
  3. 多久会发生一次?
  4. 我可以阻止它,还是降低概率?
  5. 在这种情况下事务性任务是否排队?
  6. 这种情况是一个错误,将在未来修复,还是一个我应该习惯的功能?

【问题讨论】:

  • 事务并不是 nosql 数据结构的真正特性 - 看看这个答案stackoverflow.com/questions/2212230/transactions-in-nosql
  • 关键是让它具有幂等性。那么重复就无所谓了。
  • 我在这个领域相对较新,但似乎并不那么容易。有时我需要强制执行唯一性 - 例如考虑用户名。如果我得到一个异常,我可以重试事务,但如果它成功了怎么办。我不知道是谁创造了这张唱片——我或其他线程。在设计正确的解决方案之前,我只需要更多的知识

标签: google-app-engine google-cloud-datastore app-engine-ndb


【解决方案1】:

是的,它也会影响 ndb。

潜在原因包括数据存储服务器成功提交但无法将结果传达给应用的网络分区。

这种情况很少见,但无法预防,也永远无法修复。它是所有分布式系统所固有的。

任务队列添加由数据存储服务器与事务一起提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多