首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lambda - DynamoDB模式

Lambda - DynamoDB模式
EN

Stack Overflow用户
提问于 2022-10-31 13:10:36
回答 1查看 35关注 0票数 1

我正在创建一个简单的匹配系统使用Lambda和DynamoDB。

为了简单起见,想象一下一个游戏,您可以赌1美元、2美元和5美元。人们根据他们所赌的赌注而得到匹配。

我有一个名为“findGame”的lambda函数,它有:

  1. 从DynamoDB读取并检查没有相同的利害关系(如果有,那么我们匹配这两个人(使用WebSockets))
  2. 如果没有匹配的木桩,我们在表中插入木桩和玩家的信息

现在问题是:这很好,直到考虑到lambda可以并行运行。在测试时,我估计如果两个人同时点击“findGame”,两个数据库中的读取都不会返回任何内容,而且我将在数据库中拥有这两条记录,而不会真正匹配它们。

我的临时解决方案是使用DynamoDB流,它将我的体系结构转换为以下内容:

  • Lambda函数'findGame':在DB中插入记录
  • DynamoDB Stream -> Lambda函数‘匹配’-> On 'INSERT',如果有匹配的利害关系来匹配它们,我从DB中读取,而且由于流是连续的,这种类型解决了我的问题。然而,我有一种感觉,这种架构是错误的,因为流主要用于日志记录。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-31 13:31:19

你要找的是条件投入

如果您有多个并发插入,一个将成功,其余将失败,那么您可以处理错误。

有点像

代码语言:javascript
运行
复制
client.putItem({
   TableName: "BettingGame",
   Item: {
     "PK": "user#john#bet#2",
     ...extra properties ...
   },
   ConditionExpression='attribute_not_exists(PK)'
})

另一种选择是使用事务,但to使用2倍多的容量单位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74263798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档