[英]DynamoDB modelling advice, duplicating a field for lookup
我正在嘗試 model 在體育博彩應用程序中建立關系。
對於給定的體育比賽,用戶可以預測他們認為誰會獲勝。 我正在考慮為此應用程序構建登錄頁面,用戶可以在其中查看他們擁有或參與(做出預測)的所有活動礦池。 我的數據 model 看起來像這樣
因此,例如,我們有一個池 ID a1
,由用戶b2
擁有,用戶b1
和b2
有兩個預測。
要獲得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) ...
這樣你就可以
預言
PK SK Prediction attributes
PREDICTION_USER#(user id) POOL_ACTIVE#True#POOL_NAME#(pool name) ...
這樣你就可以
現在,當“停用”池時,您將必須更新所有條目。 如果您擔心數據一致性,您可以使用事務,但請記住它們有 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.