[英]DynamoDB Model Chronological Shipment Update Data
我最近剛開始學習 DynamoDB 單表設計。 現在,我正在嘗試對具有以下屬性的 Shipment Update 數據進行建模:
訪問模式:
我在嘗試解決上述兩種訪問模式時遇到了困難。 如果,就其本身而言,我每個貨件只有 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.