我的 DynamoDB 表中目前有以下資料:
person_id_and_gender | ttl(timestamp) | person_movie_rate |
-------------------------------------------------------------------------------------------------------
id_1:male | 123456789 | amazing_spider_man:0.8, iron_man:0.674, dr_strange:0.32, ... |
id_9:non-binary | 123000089 | batman:0.9, iron_man:0.874, terminator:0.55, lala_land:0.5 ...|
...
如您所見,此表試圖將一個人與其評分之間的關??系保存到不同電影的串列中。隨著新電影數量的快速增長,條目大小限制(400k)已經達到,因此我們必須切斷一些評級以適應一個人的一個條目。
當前配置:person_id_and_gender是該表的主鍵,它沒有排序鍵。
有沒有更好的方法來重新設計這個模式,這樣即使我們有越來越多的評分,我們也不會爆炸條目?
請注意:
所有列名/屬性都是組成的。它們僅用作示例(盡管可能是壞示例)。
在我們的用例中,我們可能有更多的“性別”(男性、女性、非二進制等等……)
在我們的用例中,我們假設一個人可能有不同的性別,換句話說,我們可能會看到
id_2:male并id_2:female出現在同一個表中,我們需要兩個資料點。
更新:當前的查詢模式只是通過 獲取電影評級串列,person_id_and_gender換句話說,是一個人的所有評級。
uj5u.com熱心網友回復:
正如其他人所指出的,關于從訪問模式開始的常見健康警告適用。考慮到這個重要的警告,與評級數量成比例的模式將是:
| PK | SK | 評分 | 生日 |
|---|---|---|---|
id_1:male |
Attributes |
2000-01-10 |
|
id_1:male |
Rating#amazing_spider_man |
0.8 |
|
id_1:male |
Rating#iron_man |
0.674 |
|
id_9:non-binary |
Rating#iron_man |
0.874 |
這將使用通用的鍵名(PK和SK)和復合排序關鍵字值模型許多一對多的關系在一個單一的表設計。
PK = "id_1:male" AND SK = "Attributes" # user attributes
PK = "id_1:male" AND SK > "Rating" # all ratings for a user
PK = "id_1:male" AND SK = "Rating#amazing_spider_man" # user rating for a specific movie
如果您的用例需要按電影查詢,您可以添加一個索引來交換鍵:GSI1PK是電影,GSI1SK是 user_id。
此外,如果將索引的 SK 中的性別和 id 倒置,則可以按性別查詢電影評分。
GSI1PK = "iron_man" AND GSI1SK > "" # iron man ratings for all users
GSI1PK = "iron_man" AND begins_with(GSISK, "non-binary") # iron man ratings for non-binary users
uj5u.com熱心網友回復:
您沒有指定查詢和更新模式,因此很難給出明確的答案。
猜測你的模式,我的建議是讓電影標題成為排序鍵。然后,您可以 get_item 一個人對電影的評分或查詢以獲取一個人的所有(與性別相關的)評分。沒有電影數量限制。如果您愿意,您可以保留每個專案的 TTL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/399947.html
