Amazon dynamodb 如何正确地编写一个游戏;“购买/出售物品”;交易
我正在为rpg游戏开发“购买/出售物品”功能。如果我是正确的,则需要在单个事务中执行以下操作Amazon dynamodb 如何正确地编写一个游戏;“购买/出售物品”;交易,amazon-dynamodb,Amazon Dynamodb,我正在为rpg游戏开发“购买/出售物品”功能。如果我是正确的,则需要在单个事务中执行以下操作 根据“玩家”表中的playerID获取玩家 检查玩家是否有足够的金币,如果有,创建新物品对象 将新项目对象写入“项目”表,其中所有者基于pllayerID 更新“玩家”表中所有者为玩家ID的行,根据物品成本扣除金币 如果在上述玩家中,在事务运行或步骤3或4无法同时执行时,gold发生变化,则事务应失败 我已经阅读了文档,可以看到DynamoDB有TransactionWriteItems和Transac
playerID
获取玩家pllayerID
3
或4
无法同时执行时,gold发生变化,则事务应失败
我已经阅读了文档,可以看到DynamoDB有
TransactionWriteItems
和TransactionGetItems
,这两个项目似乎非常适合于此,但它们是分开的。我可以在单个事务中使用它们吗?一旦您拥有playerID
,您应该能够将步骤4合并到步骤2,然后在一个事务写入项中执行步骤2-3
:
有条件地更新
黄金的价值-如果有足够的黄金,立即扣除项目成本,否则条件失败,TransactionWriteItems
Items
表TransactionWriteItems
将操作“更新黄金”和“放置项目”分组为单个项目
全有或全无操作:要么都成功,要么都失败。如果另一个操作受到干扰,它们也都会失败(无竞争条件)
例如:
- 如果没有足够的黄金,更新将失败,因此添加项目也将失败
- 如果添加项目失败,对黄金所做的更改将不会保留(更新将“失败”)
- 如果另一个操作正在修改黄金金额,则两个操作都会失败
TransactionWriteItems
操作中,所以要么两者都发生,要么两者都不发生
您可以在Java中找到一个示例。(对于您的用例,您可以简单地删除客户验证,并将“产品状态更新”更改为“玩家黄金更新”,将“添加订单”更改为“添加项目”。)
有关更多详细信息,请参阅
TransactionWriteItems
文档。这听起来仍然像是单独的步骤,在竞争条件下,值可能会发生变化,但我可能有点误解。如果您有机会提供一个示例(任何代码语言都可以),我编辑了答案,并解释了TransactionWriteItems的原子性和到示例的链接。希望这能有所帮助,如果还有什么不清楚,请告诉我。