当前位置: 首页 > 知识库问答 >
问题:

我应该如何处理DynamoDB中潜在的冲突?

岳君之
2023-03-14

你和我都想去听音乐会,但只剩下一张票了。我们都试图同时预订那张票。使用AWS SDK for PHP的PHP脚本运行以下updateItem API调用,该调用试图将“票据”的“状态”从0(可用)更改为1(保持)。

        try {
        $response = $ddb->updateItem(array(
            "TableName" => "tickets",
            "Key" => array(
                "tn" => array("N" => $request["tn"])
            ),
            "AttributeUpdates" => array(

                // set ticket state (ts) = 1...

                "ts" => array(
                    "Value" => array("N" => 1)
                ),
                <snip - more fields updated here to "own" the ticket>
            ),
            "Expected" => array(
                "ts"   => array(

                    // ...where ticket state (ts) = 0

                    "ComparisonOperator" => "EQ",
                    "AttributeValueList" => array(
                        array( "N" => "0")
                    )
                )
            ),
            "ReturnValues" => "ALL_NEW"
        ));

        } catch (Exception $e) {
            $this->ErrorMessage(5, "Call to ReserveTicket failed: " . $e->getMessage());
        }
  1. 对于这个用例,这是正确的方法吗?
  2. 有人看过DynamoDB文档吗?
  3. 如果这是一个正确的实现,对测试方案有什么建议吗?

共有1个答案

施誉
2023-03-14

DynamoDB使用乐观并发控制模式来处理您的用例。它被实现为“条件更新”。当使用条件更新时,只有当属性的值在读取之后没有改变时,API才会写入项。如果更改了它,将引发错误,并由应用程序做出决定。

有关详细信息,请参阅http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workingwithitems.html#workingwithitems.conditionalupdate。

 类似资料:
  • 问题内容: 我正在学习MySQL并尝试使用子句。当我如下使用它时: 我收到以下错误: MySQL服务器正在使用–secure-file-priv选项运行,因此它无法执行此语句 我该如何解决这个错误? 我已经检查了关于同一错误消息的另一个问题,但仍然找不到解决方案。 我正在使用MySQL 5.6 问题答案: 它按预期工作。您的MySQL服务器已使用--secure-file- priv 选项启动,该

  • 问题内容: 我有一种算法,当前会分配很大的双精度数组,它会经常更新和搜索。数组的大小为N ^ 2/2,其中N是算法在其上进行操作的行数。为了与算法周围的应用程序相关联,我还必须保留整个内容的副本。 当然,这对我的算法可以处理的行数施加了限制,因为我要应对堆的限制。到现在为止,我还没有要求使用该算法的人员更新- Xmx设置以分配更多的空间,并且效果很好。但是,我现在遇到了一个真正的问题,我需要此数组

  • 你好,我正在学习OOP,通过编写一个虚拟的库管理项目在Java。 在serachBook()中,如果在ArrayList中找到book,则返回book对象,如果未找到,则抛出自定义异常BookNotFound。 问题1:它应该只返回null并在调用代码时检查返回值是否为null,还是抛出自定义异常BookNotFound。 目前我认为BookNotFinder是合适的,并且目前正在这样做。然而,我

  • 问题内容: 我有一个表格,希望能够显示“从Y到X排名”的数据。特别是,我希望能够以一种相对有效的方式(即不选择表中的每一行)来显示单个行的数据。排名本身很简单,它是对表中单列的直接ORDER BY。 在这方面,Postgres似乎提出了一些独特的挑战。AFAICT它没有RANK或ROW_NUMBER或同等功能(至少在8.3中,我暂时停留在此位置)。邮件列表档案中的规范答案似乎是创建一个临时序列并从

  • 问题内容: 我有以下从缓冲读取器读取数据的示例: 每当缓冲读取器中出现某些情况时(在这种情况下),将执行循环中的代码。在我的情况下,如果客户端应用程序将某些内容写入套接字,则将执行循环中的代码(服务器应用程序中)。 但是我不明白它是如何工作的。等待直到缓冲读取器中出现某些内容,当其中出现某些内容时,它将返回并执行循环中的代码。但是什么时候可以退货。 还有另一个问题。上面的代码摘自一个方法,我在线程

  • 问题内容: 我想知道是否有人可以提供一些有关他们如何在React.js中处理假动画的见解。我一直在使用Greensock TweenMax,并且enter动画在上可以正常工作,但是我还没有找到一种可靠的方法来对组件进行动画处理。 我的感觉是它应该进入,但是React没有提供回调机制来指示您何时准备释放组件。因此过渡动画永远不会完成,因为这些动画与React是异步的。取而代之的是,您只看到一秒钟的动