我有一個簡單的單表設計,希望在未來保持靈活,我目前有 2 種物體型別:用戶和視頻。用戶與視頻具有 1:n 的關系。
表的磁區鍵是pk,排序鍵是sk。
用戶:pk=u#<id> and sk=u#<id>,entityType: user
視頻:pk=u#<id> and sk=v#<id>,entityType: video
PK=entityType如果我想獲取所有用戶,使用and創建 GSI 是否有意義SK=sk?
uj5u.com熱心網友回復:
不,因為這樣所有用戶寫入都將轉到同一個 PK,這并不理想。相反,使用 GSI1PK 設定一個 GSI,其中包含您的用戶 ID,然后您可以對其進行掃描。專案中的基本屬性。僅為用戶物體型別設定 GSI1PK,因此它是一個稀疏 GSI。
uj5u.com熱心網友回復:
這是您可以采取的一種方法,它可以完成作業,但它有一些缺點/副作用:
- 您還將復制該 GSI 中的所有視頻,這會增加它的存盤和吞吐量成本
- 您將創建一個包含所有用戶的潛在巨大專案集合,這可能導致熱磁區并且可能無法很好地擴展。
相反,請考慮將 GSI 中的巨大用戶磁區拆分為具有可預測鍵的多個磁區。
如果您打算稍后按用戶名列出您的用戶,您可以將用戶名的第一個字母作為磁區鍵,從而創建大約 26 個(取決于大小寫和字符集)不同的磁區,這樣可以更好地分散負載。要列出所有用戶,您必須對所有磁區發出查詢,這在小尺寸時很煩人,但更具可擴展性。
另一種選擇是定義您希望將用戶分散到n磁區之間,然后使用類似hash(user_id) mod n的方法獲取 GSI 的磁區鍵。這樣,您就必須進行n查詢以獲取所有磁區的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467194.html
標籤:亚马逊网络服务 亚马逊-dynamodb dynamodb 查询 amazon-dynamodb-index
上一篇:為什么我的使用AWSAmplify的ReactAuthentication組件在使用ReactRouterV6保護路由時被無限渲染
