【问题标题】:ndb independent transactions and retryndb 独立事务和重试
【发布时间】:2012-11-30 12:23:10
【问题描述】:

在以下场景中查找数据存储行为的详细说明时遇到问题。

  1. 事务已启动
  2. 进行了一些更改
  3. 另一个独立的事务是使用 ndb.TransactionOptions.INDEPENDENT 传播级别启动的。它的目的是增加一个分片计数器。我需要它作为嵌套事务,因为我将有很多计数器,并且只能在一个事务中使用 5 个实体组
  4. 嵌套事务提交成功
  5. 主事务正在尝试提交,但失败
  6. 重试后主要事务正在提交

我认为嵌套事务只运行一次,但我无法验证这个假设。 有人知道它是如何工作的吗?

【问题讨论】:

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


    【解决方案1】:

    放入一些日志语句以查看行为。如果步骤 3-4 由主事务的代码发起,则每次重试主事务时都会启动独立事务。这就是为什么它被称为独立的,而不是嵌套的。

    【讨论】:

    • 我知道我的假设是错误的,我需要一些其他的机制。如果在事务重试期间没有重复问题,我可以假设事务任务排队吗?
    • 我又想到了一件事。我不知道如何以可预测的方式重现应用程序引擎重试机制。你关于日志记录的评论让我觉得这很容易。应用引擎重试功能与多次调用事务函数有什么不同吗?
    • 你还没有解释你想要做什么。但是是的,事务函数只会被调用,直到事务成功或直到重试计数。事务性任务入队确实只有在事务成功时才入队。
    • 谢谢。现在我有一种感觉,我了解它是如何工作的,这对我很重要。我试图解决的具体问题是作为事务的结果增加一些分片计数器。当我意识到它们的数量超过了一个交易中允许的数量时,我将它们包含在一个单独的交易中。现在我看到事务性任务队列是正确的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    相关资源
    最近更新 更多