我正在创建一个简单的匹配系统使用Lambda和DynamoDB。
为了简单起见,想象一下一个游戏,您可以赌1美元、2美元和5美元。人们根据他们所赌的赌注而得到匹配。
我有一个名为“findGame”的lambda函数,它有:
现在问题是:这很好,直到考虑到lambda可以并行运行。在测试时,我估计如果两个人同时点击“findGame”,两个数据库中的读取都不会返回任何内容,而且我将在数据库中拥有这两条记录,而不会真正匹配它们。
我的临时解决方案是使用DynamoDB流,它将我的体系结构转换为以下内容:
发布于 2022-10-31 13:31:19
你要找的是条件投入。
如果您有多个并发插入,一个将成功,其余将失败,那么您可以处理错误。
有点像
client.putItem({
TableName: "BettingGame",
Item: {
"PK": "user#john#bet#2",
...extra properties ...
},
ConditionExpression='attribute_not_exists(PK)'
})
另一种选择是使用事务,但to使用2倍多的容量单位。
https://stackoverflow.com/questions/74263798
复制相似问题