[英]How to store large arrays in DynamoDB
我是 DynamoDB 的新手,我很好奇存儲潛在大型數組的最佳方式是什么。
我有一個看起來像這樣的用戶對象:
UserId: String
Watching: Card[]
Listings: Card[]
我知道 Dynamo 中的對象大小是有限制的——我認為是 1MB? 因此,我認為如果用戶有很多列表,它可能會超過這個限制。 存儲這樣的潛在大型數組的最佳做法是什么? 是否可能存儲一個 CardIds 數組,然后進行第二次查詢以從中獲取卡片?
DynamoDB 中的對象限制為400 KB
,請參閱DynamoDB 配額。
對於較大的屬性值,AWS 建議以 GZIP 等格式壓縮屬性,並將其以二進制形式存儲在 DynamoDB 中。 其他選項是以 JSON 格式將項目存儲在 S3 中,並將此文件的密鑰存儲在 DynamoDB 中。
請參閱: 存儲大型項目和屬性的最佳實踐
可能,第三種選擇是以某種方式拆分您的數組,並在 DynamoDB 中創建多個條目。 或者嘗試為單獨的屬性創建單獨的表,如果例如Listings
數組的大小大於對象限制本身,這顯然不會解決問題。
一種選擇是使用單表設計方法,其中所有用戶、觀看次數和列表都在同一個表中。
用戶項目將有一個用戶#uid 的主鍵和user#uid
user#uid
的 sk(與 pk 相同),每個觀看項目將有一個user#uid
的 pk 和watching#wid
的 sk,並且每個列表都有一個 pk listing#lid
#lid 的user#uid
和 sk。
例如:
PK | sk | 其他屬性 |
---|---|---|
用戶#1 | 用戶#1 | 是的 |
用戶#2 | 用戶#2 | 是的 |
用戶#42 | 用戶#42 | 是的 |
用戶#42 | 觀看#12 | 可選的 |
用戶#42 | 觀看#29 | 可選的 |
用戶#42 | 清單#901 | 可選的 |
用戶#42 | 清單#472 | 可選的 |
這種方法對觀看或列出關系的數量沒有真正的限制。
然后,您只需發出對pk=user#42
的查詢即可查詢給定用戶的所有項目,這將產生用戶以及所有相關的觀看和列表項目(盡管有分頁)。 您可以使用pk=user#42
和sk begins_with("listing#")
查詢給定用戶的所有列表。
請注意,這會增加表的大小,因為屬性值上有額外的“user”、“watching”和“listing”前綴,因此您可能需要考慮縮寫這些前綴。
引用亞歷克斯·德布里的話:
在 DynamoDB 中使用單個表的主要原因是使用單個請求檢索多個異構項目類型。
dynamoDB 中的表,表中的每一行都是對象。
一行中的項目以 json 對象格式查看它。
該行不支持 json 數組。
分成2張桌子。 在表A中存儲列表,在表B中存儲列表。正確設計主鍵和排序鍵,以便它可以識別屬於特定用戶的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.