【问题标题】:DynamoDB single table design for both an "amount" item and separate "amount update entry" items“金额”项目和单独的“金额更新条目”项目的 DynamoDB 单表设计
【发布时间】:2021-03-29 20:33:56
【问题描述】:

我是 DynamoDB 的新手,并尝试对单个表设计进行建模/索引以跟踪单个数字值,但每次更改数字时都有单独的更新条目。每次更新数字值时,都应该将更新条目保存到表中(作为它自己的项目,而不是作为单个“跟踪数字”项目的属性),当然跟踪数字值也应该更新。我希望能够按日期和数字更改值查询和排序更新条目。当然,我希望能够查看当前的数值。

对于这种数据和访问模式,什么是好的单表设计?我尝试了几种不同的方法,但发现自己被阻止了,因为要么无法获取/写入全局二级索引,要么在尝试仅查询更新条目本身时总是返回具有当前数值的项目。我可以很容易地为跟踪号码和号码更新创建一个单独的表,但这似乎违反了 DynamoDB 原则。

【问题讨论】:

    标签: amazon-web-services database-design nosql amazon-dynamodb dynamodb-queries


    【解决方案1】:

    您可以创建一个包含两种类型条目的表:

    1. 当前金额,其中值的 ID 作为分区键,文字字符串 CURRENT_AMOUNT 作为排序键,以及包含实际值的属性 current_amount
    2. 更新条目,其值的 ID(与 1. 中相同)作为分区键,时间戳作为排序键,两个属性 new_amountold_amount 表示更改的值。

    这样,你可以检索:

    • 当前物品数量: pk={{ID}} AND sk="CURRENT_AMOUNT"
    • 一个项目的历史: pk={{ID}} AND sk <> "CURRENT_AMOUNT"
    • 同时显示项目的当前金额和历史记录:pk={{ID}}

    使用二级索引可能会满足其他访问模式。

    下面是一个包含一些条目的表格的示例:

     -----------------------------------------------------------------------
    | 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          |
     -----------------------------------------------------------------------
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2012-11-29
      • 1970-01-01
      • 2021-01-20
      • 2013-01-08
      • 2021-04-26
      相关资源
      最近更新 更多