簡體   English   中英

DynamoDB 建模建議,復制一個字段以供查找

[英]DynamoDB modelling advice, duplicating a field for lookup

我正在嘗試 model 在體育博彩應用程序中建立關系。

對於給定的體育比賽,用戶可以預測他們認為誰會獲勝。 我正在考慮為此應用程序構建登錄頁面,用戶可以在其中查看他們擁有或參與(做出預測)的所有活動礦池。 我的數據 model 看起來像這樣

在此處輸入圖像描述

因此,例如,我們有一個池 ID a1 ,由用戶b2擁有,用戶b1b2有兩個預測。

要獲得a1擁有的所有活動池很簡單,我只需在 OwnerId 上添加一個 GSI 並按 IsActive 進行過濾。

但是,我不確定如何獲取a1不是其所有者但已對其進行預測的所有活動池。 這里最好的選擇是將 IsActive 標志復制到 Predictions 並將 OwnerId 添加到 Predictions,這樣我可以先按 OwnerId 獲取並按SK startswith Prediction過濾以獲取池 ID,然后通過這些 ID 獲取池配置文件?

你沒有像那樣充分利用PK。

以下是我將如何設計您所描述的 2 個實體(希望我理解正確)

水池

PK                   SK                            Other attributes
POOL_OWNER#(UserId)  Active#True#POOL_NAME(Or ID)  ...

這樣你就可以

  • 獲取給定用戶的所有池(按分區鍵查詢)
  • 獲取給定用戶的所有活動/非活動池(查詢以“Active =True/False”開頭)

預言

PK                        SK                                      Prediction attributes
PREDICTION_USER#(user id) POOL_ACTIVE#True#POOL_NAME#(pool name)  ...

這樣你就可以

  • 通過查詢 PK 獲取用戶的所有預測
  • 獲取特定池+活動/非活動池的用戶的所有預測

現在,當“停用”池時,您將必須更新所有條目。 如果您擔心數據一致性,您可以使用事務,但請記住它們有 25 個項目的限制(但他們最近將該數字提高到 100)

如果你需要得到一個池的所有預測,你可以為它添加一個 GSI

GSI1PK                           GSI1SK
PREDICTION_POOL_NAME#(pool name) PREDICTION_USER#(user id)

將要使用的數據直接放入 PK 或 SK 中並不是一個好主意。 例如,如果您需要 UserID,不要從 SK 中提取它,而是有一個單獨的屬性 UserId,這樣更改和重載 PK 和 SK 就容易得多

暫無
暫無

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

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