【问题标题】:Dynamodb update multiple items in one transactionDynamodb 在一个事务中更新多个项目
【发布时间】:2022-12-10 04:01:04
【问题描述】:

在我的 dynamodb 表中,我有一个场景,当我向表中添加一个新项目时,我还需要为表中的另一个条目增加一个计数器。

例如,当 USER#1 关注 USER#2 时,我想增加 USER#2 的关注者数量。

HashKey RangeKey counter
USER1 USER2
USER3 USER2
USER2 USER2 2

我不想使用自动增量,因为我想控制增量的发生方式。

当然,如果我对 dynamodb 进行两次更新调用,一切都会按预期进行。一个用于创建用户之间的关系,另一个用于更新其他用户的计数。

问题是,进行两次这样的调用是否是一种好方法,或者 transactWrite 是否是更好的选择。

如果是这样,我如何使用 transactwrite api 进行增量。

我可以使用以下方法添加项目。但我不确定如何增加

"TransactItems": [
            {
                "Put": {
                    "TableName": "Table",
                    "Item": {
                        "hashKey": {"S":"USER1"}, 
                        "rangeKey": {"S":"USER2"}
                    }
                }
            },
            {
                "Update": {
                    "TableName": "TABLE",
                    "Key": {
                        "hashKey": {"S":"USER2"}, 
                        "rangeKey": {"S":"USER2"}
                    },
                    "ConditionExpression": "#cefe0 = :cefe0",
                    "ExpressionAttributeNames": {"#cefe0":"counter"},
                    "ExpressionAttributeValues": ?? how do I increment here
                }
            }
        ]

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

    事务绝对是处理它的最佳方式,您可以在 UpdateExpression 中使用 SET 递增:

    "TransactItems": [
            {
                "Put": {
                    "TableName": "Table",
                    "Item": {
                        "hashKey": {"S":"USER1"}, 
                        "rangeKey": {"S":"USER2"}
                    }
                }
            },
            {
                "Update": {
                    "TableName": "TABLE",
                    "Key": {
                        "hashKey": {"S":"USER2"}, 
                        "rangeKey": {"S":"USER2"}
                    },
                    "UpdateExpression": "SET #cefe0 = #cefe0 + :cefe0",
                    "ExpressionAttributeNames": {"#cefe0":"counter"},
                    "ExpressionAttributeValues": {"cefe0": {"N": "1"}}
                }
            }
        ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2022-10-15
      • 1970-01-01
      • 2019-12-30
      • 2018-05-11
      相关资源
      最近更新 更多