DynamoDB 单一 table 设计用于 "amount" 项和单独的 "amount update entry" 项
DynamoDB single table design for both an "amount" item and separate "amount update entry" items
我是 DynamoDB 的新手,正在尝试 model/index 单个 table 设计来跟踪单个数字值,但每次更改数字时都有单独的更新条目。每次更新数字值时,都应将更新条目保存到 table(作为它自己的项目,而不是作为单个“跟踪数字”项目上的 属性),当然还有被跟踪的数字值也应该更新。我希望能够按日期和数字更改值查询和排序更新条目。当然,我希望能够查找当前数值。
这种数据和访问模式的良好单一 table 设计是什么?我尝试了几种不同的方法,但发现自己被阻止了,因为要么无法 get/write 到全局二级索引,要么在尝试仅查询更新条目本身时总是返回具有当前数值的项目。我可以很容易地为跟踪号码和号码更新创建一个单独的 tables,但这似乎违反了 DynamoDB 原则。
您可以创建一个包含两种条目的 table:
- 当前金额,值的 ID 作为分区键,文字字符串
CURRENT_AMOUNT
作为排序键,属性 current_amount
包含实际值。
- update条目以值的ID(与1中相同)作为分区键,时间戳作为排序键,两个属性
new_amount
和old_amount
表示更改后的值。
这样,您可以检索:
- 当前物品数量:
pk={{ID}} AND sk="CURRENT_AMOUNT"
- 一个项目的历史:
pk={{ID}} AND sk <> "CURRENT_AMOUNT"
- 同时显示项目的当前数量和历史记录:
pk={{ID}}
使用二级索引可能会满足其他访问模式。
下面是 table 与某些条目的外观示例:
-----------------------------------------------------------------------
| pk | sk | current_amount | new_amount | old_amount |
-----------------------------------------------------------------------
| ID1 | "CURRENT_AMOUNT" | 7 |-------------------------|
| | 2020-12-19T14:01:42Z |----------------| 7 | 5 |
| | 2020-12-17T19:07:32Z |----------------| 5 | 9 |
-----------------------------------------------------------------------|
| ID2 | "CURRENT_AMOUNT" | 3 |-------------------------|
| | 2020-12-19T08:01:12Z |----------------| 3 | 7 |
-----------------------------------------------------------------------
我是 DynamoDB 的新手,正在尝试 model/index 单个 table 设计来跟踪单个数字值,但每次更改数字时都有单独的更新条目。每次更新数字值时,都应将更新条目保存到 table(作为它自己的项目,而不是作为单个“跟踪数字”项目上的 属性),当然还有被跟踪的数字值也应该更新。我希望能够按日期和数字更改值查询和排序更新条目。当然,我希望能够查找当前数值。
这种数据和访问模式的良好单一 table 设计是什么?我尝试了几种不同的方法,但发现自己被阻止了,因为要么无法 get/write 到全局二级索引,要么在尝试仅查询更新条目本身时总是返回具有当前数值的项目。我可以很容易地为跟踪号码和号码更新创建一个单独的 tables,但这似乎违反了 DynamoDB 原则。
您可以创建一个包含两种条目的 table:
- 当前金额,值的 ID 作为分区键,文字字符串
CURRENT_AMOUNT
作为排序键,属性current_amount
包含实际值。 - update条目以值的ID(与1中相同)作为分区键,时间戳作为排序键,两个属性
new_amount
和old_amount
表示更改后的值。
这样,您可以检索:
- 当前物品数量:
pk={{ID}} AND sk="CURRENT_AMOUNT"
- 一个项目的历史:
pk={{ID}} AND sk <> "CURRENT_AMOUNT"
- 同时显示项目的当前数量和历史记录:
pk={{ID}}
使用二级索引可能会满足其他访问模式。
下面是 table 与某些条目的外观示例:
-----------------------------------------------------------------------
| pk | sk | current_amount | new_amount | old_amount |
-----------------------------------------------------------------------
| ID1 | "CURRENT_AMOUNT" | 7 |-------------------------|
| | 2020-12-19T14:01:42Z |----------------| 7 | 5 |
| | 2020-12-17T19:07:32Z |----------------| 5 | 9 |
-----------------------------------------------------------------------|
| ID2 | "CURRENT_AMOUNT" | 3 |-------------------------|
| | 2020-12-19T08:01:12Z |----------------| 3 | 7 |
-----------------------------------------------------------------------