首页 > 解决方案 > AWS DynamoDB 分区键设计

问题描述

我读了这个答案,它澄清了很多事情,但我仍然对如何设计我的主键感到困惑。

首先,我想澄清 WCU 的概念。我知道 WCU 是每秒最大 1kb 的写入容量。这是否意味着如果写入一条数据需要 0.25 秒,我需要其中的 4 个来计费 1 个 WCU?或者每次我写东西都会消耗 1 个 WCU,但我也可以在 1 秒内写 X 次,仍然需要 1 个 WCU?

用法

我想创建一个表来存储一组健身房的表单数据(95% 将是豁免,其余将是事件报告)。大多数情况下,每个表单都将通过其唯一 ID 直接访问。我还想按日期、表单、userId 等查询表单。

我们可以假设每个健身房平均有 50k 表格

选项

还有其他选择吗?这三个哪个更好?

编辑:我假设另一个选项是SimpleDB

标签: amazon-web-servicesnosqlamazon-dynamodb

解决方案


为您的PK设计。当用户要查找表单时,应用程序有哪些数据?它有 GymID、userID 和 formID 吗?如果是这样,也许为PK制作一个复合键?所以你的 PK 可能看起来像:

234455::53894302::245 

其中 23445 是 GymID,53894302 是用户 ID,245 是表单 ID。您甚至可以将表单 ID 移动到排序键和日期,您可以有一个表单::245:: 的 SK。然后,您可以轻松获取该用户的所有表单类型项目,或该用户的所有表单 245。或该用户在 2020 年的所有表格 245,方法是在您的 QUERY 中使用 begin_with() 表达式。

这可能不完全是你应该做的,但玩它,看看你想出了什么选项。需要考虑的一件事是当用户移动健身房时会发生什么?也许在这种罕见的情况下,您使用新的gymID 重写他们在数据库中的所有项目。可能你PK中没有gymID。没有更多信息,很难说。希望这足以让您仔细研究,以便您提出解决方案。


推荐阅读