簡體   English   中英

DynamoDB 模型按時間順序發貨更新數據

[英]DynamoDB Model Chronological Shipment Update Data

我最近剛開始學習 DynamoDB 單表設計。 現在,我正在嘗試對具有以下屬性的 Shipment Update 數據進行建模:

  • 一個帳戶有多個用戶
  • 一個賬戶有多個貨件
  • 一次裝運可以多次更改 eta
  • 每次有貨件更新,都會插入一條新記錄

訪問模式:

  1. 獲取顯示 eta 以升序排序的最后更新狀態的帳戶的所有貨件
  2. 對於給定的貨物,獲取按時間順序的更新

在此處輸入圖像描述

在此處輸入圖像描述

我在嘗試解決上述兩種訪問模式時遇到了困難。 如果,就其本身而言,我每個貨件只有 1 條記錄,那么我可以將貨件更新項目的排序鍵更新為shpm#55abc ,並且 eta 可以直接檢索給定帳戶的所有貨件,即通過gsi accountEta

如何解決此問題以獲得所需的訪問模式? 我是否應該考慮為貨件更新審核設置一個單獨的表格,即僅存儲貨件更新? 因此,當我需要訪問模式 #2 時,我會通過貨件 ID 查詢此審計表以獲取所有按時間順序的更新。 但是,我覺得這違背了單表設計的目的。

單表設計非常適合這些訪問模式。 使用可重載的通用鍵名,如 PK 和 SK。 這是一種方法*

裝運有“當前”記錄。 添加全局二級索引 ( GSI1 ) 以創建備用主鍵,以便按 ETA 順序按帳戶查詢(模式 #1)。 對裝運的所有更改都將作為對此“當前”記錄的更新執行。

# shipment "current" record
PK             SK                                 GSI1PK            GSI1SK
shpmt#55abc    x_current                          account#123       x_eta#2022-07-01

接下來,在表上啟用DynamoDB Streams以捕獲發貨更改。 每次更新“當前”記錄時,支持 Stream 的 Lambda 會將OLD_IMAGE作為更改控制記錄寫入表。 這將通過發貨和帳戶啟用模式#2。

# shipment update record
PK             SK                                 GSI1PK           GSI1SK
shpmt#55abc    update#2022-06-28T06:10:33.247Z    account#123      update#2022-06-28T06:10:33.247Z

這種方法的一個優點是單個查詢操作可以以相反的順序檢索當前裝運記錄及其全部/部分更改歷史記錄。 這就是當前記錄的鍵上有x_前綴的原因。 鍵表達式為PK = shpmt#55abc AND SK >= "update"的查詢,使用ScanIndexForward=False和限制為 2 的 DESC 排序返回當前記錄 ( x_current ) 和最新的更新記錄。

* 這對您來說是否是一個好的解決方案還取決於預期的讀/寫量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM