gpt4 book ai didi

amazon-web-services - DynamoDb 表设计 : Single table or multiple tables

转载 作者:行者123 更新时间:2023-12-04 01:58:45 24 4
gpt4 key购买 nike

我对 NoSQL 和 DynamoDB 还很陌生,而且我习惯了 RDBMS。我正在为游戏设计数据库,我们使用 DynamoDB 和 AWS Lambda 作为后端。我为包含用户信息和资源的玩家资料创建了一个名为“Users”的表。因为游戏有库存系统,我还创建了一个表名“UserItems”。

一切都很好,直到我意识到 DynamoDB 没有事务,并且在两个表上执行的任何操作(例如使用增加资源的项目)都有可能在一个表上失败而在另一个表上成功,并会导致丢失数据影响我们的顾客。

所以我在想,也许我的多表设计不太好,因为我在使用 RDBMS 时设计多表是我的习惯。这让我想到将整个“UserItems”作为散列存储在“Users”中,但我不确定这是一个好习惯,因为 Users 表中单行的大小会非常大(我们可能有 500 个唯一项目每个用户)并且每次我从/向“用户”拉取或放入数据(大部分时间不需要“用户项”数据)时,读/写吞吐量也会非常大。

我该怎么办,保持多表设计并手动处理事务或切换到单表设计?或者也许有第三种选择?

更新:有关我的用例的更多信息

目前我有 2 张 table

  • 用户:用户 ID( key )、用户名、金牌
  • UserItems:UserId(分区键)、ItemId(排序键)、Name、GoldValue

  • 场景:
  • 用户购买元素:将推导出 Users.Gold,新的 UserItem 将添加到 UserItems 表中。
  • 用户出售元素:Users.Gold 将增加,该元素将从 UserItems 表中删除。

  • 在上述两种情况下,我都必须对 2 个表进行 2 次更新操作,如果没有事务,其中一个可能会失败。

    为了解决这个问题,我考虑使用单表解决方案,即具有 4 列 UserId(key)、Username、Gold、UserItems 的单个用户表。但是我担心的有两点:
  • UserItems 中的数据对于单个单元格可能会变得很大,因为一个用户最多可以拥有 500 个项目。
  • 要添加/删除项目,我必须从 dynamodb 中提取 UserItems,添加/删除项目,然后将其放回用户。所以我必须为 1 个 Action 做 1 次读取和 1 次写入操作。并且由于问题 (1),读/写数据大小可能变得非常大。
  • 最佳答案

    NoSql 数据库最适合非交易数据。如果您将规范化(将数据拆分为多个表)到 noSQL 中,那么您就违背了它的全部目的。如果性能是最重要的,那么您应该考虑只为您的用例使用一个表。 DynamoDB 支持范围键,也支持二级索引。对于您的用例,最好重新设计您的表格以使用范围键。
    如果您可以分享有关当前表格的更多详细信息,也许我可以帮助您提供更多信息。

    关于amazon-web-services - DynamoDb 表设计 : Single table or multiple tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41366955/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com