【问题标题】:all transactions fails in dynamodb when condition for one of the transaction fails当其中一项事务的条件失败时,dynamodb 中的所有事务都失败
【发布时间】:2021-02-09 23:16:25
【问题描述】:

dynamoDBproducts表中的数据。

[
  {
    productId:123,
    quantity:50
  },
  {
    productId:4565,
    quantity:10
  }
  // more items
]

现在,客户可以一次订购一种或多种产品。现在,假设客户正在订购产品123 & 4565,数量分别为30 & 12

客户可以购买产品123,但他不能购买产品4565,因为它的数量比客户想要的少。

我正在使用AWS docClientdc.transactWrite() 方法来实现这一点。但是,transactWrite 的问题在于,如果其中一个条件失败,那么所有事务都会失败。

Implementation of Atomic Transactions in dynamodb

transactWrite 的条件表达式

// QN - quantity
// :val - entered by client
ConditionExpression: '#QN >= :val'

基本上,我想更新有可用数量的产品,并提供一些关于数量不足的交易的信息。

有什么方法可以实现,或者我必须为每个产品手动调用documentClient.update()

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb


    【解决方案1】:

    使用事务的全部意义在于确保如果一个失败,什么都不会改变。

    这就是数据库中“事务”的定义。

    看来你应该只使用BatchWriteItem()

    中指定的各个 PutItem 和 DeleteItem 操作 BatchWriteItem 是原子的;但是 BatchWriteItem 整体上不是。 如果任何请求的操作由于表的配置而失败 超过吞吐量或发生内部处理故障,则 UnprocessedItems 响应中返回失败的操作 参数。

    【讨论】:

    • 但是,它没有提供任何方法来根据它在数据库中的先前值来更新任何属性。
    • 我使用了多个请求来更新多个项目。
    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 2017-12-06
    • 2020-08-06
    • 2012-01-30
    • 1970-01-01
    • 2020-07-05
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多