[英]Is there a better way to model this access pattern than to use two global secondary indexes (GSI)?
我試圖找出數據 model 和應用程序的訪問模式,以跟蹤不同領域(牧場)之間的動物運動。 有如下運動記錄:
PK FROM TO DATE
------------------------------------------------------
ANIMAL#001 FIELD#A FIELD#B January 3
ANIMAL#001 FIELD#Q FIELD#R September 19
ANIMAL#002 FIELD#A FIELD#B January 3
ANIMAL#003 FIELD#C FIELD#D March 15
ANIMAL#005 FIELD#F FIELD#A April 22
對於特定領域,例如FIELD#A
,我想知道進出該領域的所有運動、運動的日期和動物的數量。 結果應如下所示:
DATE FROM TO NUMBER_ANIMALS
--------------------------------------------------
January 3 FIELD#A FIELD#B 2
April 22 FIELD#F FIELD#A 1
可能的解決方案和嘗試:
PK=FROM, SK=TO
的 GSI。 如果我用PK=FIELD#A
查詢 GSI,這只給出圖片的一半,即來自FIELD#A
運動。 我無法獲得FIELD#A
動作。
像FIELD#A#FIELD#B
這樣的復合屬性在 GSI 中用作PK
。 遇到與嘗試 1 相同的問題。
兩個 GSI。 GSI1 有PK=FROM
並且 GSI2 有PK=TO
。 我可以使用PK=FIELD#A
查詢 GSI1 並進行一些后處理( groupby, count
)以獲得部分結果。 然后我可以使用PK=FIELD#A
和后處理查詢 GSI2,得到結果的 rest。 這看起來可行,但需要兩個 GSI 和兩個查詢。 我不能重載一個 GSI,因為正在使用的兩列都來自同一個項目。
我寧願避免掃描整個表格並過濾結果的某種組合,因為整個表格中可能有 50,000 多個項目。
我可以看到如何使用兩個 GSI 來做到這一點,但最有效的方法是什么?
我可以想象一個稍微不同的表結構( ANIMALID
是分區鍵, FIELDID
是排序鍵):
ANIMALID | FIELDID | FROM_TO | ...
——————————————————————————————————
ANIMAL#1 | FIELD#A | FROM | ...
ANIMAL#1 | FIELD#B | TO | ...
ANIMAL#2 | FIELD#C | FROM | ...
ANIMAL#2 | FIELD#A | TO | ...
以及具有以下結構的 GSI:
FIELDID | ANIMALID | ...
然后您可以僅通過FIELDID
查詢 GSI 並匯總結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.