【问题标题】:GAE ndb transaction write doesn't take retries into accountGAE ndb 事务写入不考虑重试
【发布时间】:2015-08-06 08:39:05
【问题描述】:

我正在对 GAE 上的数据存储进行事务性写入,有时会返回以下错误:

TransactionFailedError: The transaction could not be committed. Please try again.

为了自动重试事务,我在函数中添加了 retries 参数。所以看起来如下:

@ndb.transactional(retries=4)
  def myFunction():
    #code

但它似乎根本没有重试。如果我手动重新启动它执行的任务没有问题。推荐的处理方法是什么?

【问题讨论】:

  • 嘿文森特!正如您从文档cloud.google.com/appengine/docs/python/config/queue 中看到的那样,重试后会返回“transactionFailedError”。可能只是重试不起作用。也许您受到速率限制,而当您手动重试时它起作用的事实是您需要足够长的时间才能停止速率限制?
  • 谢谢帕特里斯。我不确定可能会出现什么速率限制,但这是一种可能的解释。我决定转向每日统计数据,而不是更新每个事件。它解决了这个问题,并且无论如何都会使系统更具可扩展性。
  • 感谢您的快速投票和接受 :) 我想确保您的问题的答案没有隐藏在 cmets 中,但还是谢谢您 :) 享受这个平台!如果还有其他问题,请随时在此处发布(我们会监控网站以查找有关平台的好问题并尽我们所能回答它们)。如果您有不适合 Stack 的内容,您可以随时访问我们的问题跟踪器以获取缺陷或功能请求 (code.google.com/p/googleappengine/issues/list) 或访问我们的 Google 群组以获取更多开放式问题 (groups.google.com/forum/#!forum/google-appengine)
  • 太好了,我会将这些添加到我的资源中。谢谢!

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


【解决方案1】:

docs,您会在所有交易后收到该错误消息。

我知道如果您经常尝试相同的事情,可能会遇到一些短期的“速率限制”。您可能已经遇到了其中一个问题(将解释为什么稍后手动尝试会成功)。

无论如何,正如 OP 自己指出的那样,在每个事件上推送更新都不是非常可扩展的。改用更长的更新周期(一天一次,一周一次,取决于流量)可能是一个更好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多