簡體   English   中英

對於 model 這種訪問模式,有沒有比使用兩個全局二級索引 (GSI) 更好的方法?

[英]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

可能的解決方案和嘗試:

  1. PK=FROM, SK=TO的 GSI。 如果我用PK=FIELD#A查詢 GSI,這只給出圖片的一半,即來自FIELD#A運動。 我無法獲得FIELD#A動作。

  2. FIELD#A#FIELD#B這樣的復合屬性在 GSI 中用作PK 遇到與嘗試 1 相同的問題。

  3. 兩個 GSI。 GSI1 有PK=FROM並且 GSI2 有PK=TO 我可以使用PK=FIELD#A查詢 GSI1 並進行一些后處理( groupby, count )以獲得部分結果。 然后我可以使用PK=FIELD#A和后處理查詢 GSI2,得到結果的 rest。 這看起來可行,但需要兩個 GSI 和兩個查詢。 我不能重載一個 GSI,因為正在使用的兩列都來自同一個項目。

  4. 我寧願避免掃描整個表格並過濾結果的某種組合,因為整個表格中可能有 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.

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