簡體   English   中英

如何在 DynamoDB 中存儲大型數組

[英]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#42sk begins_with("listing#")查詢給定用戶的所有列表。

請注意,這會增加表的大小,因為屬性值上有額外的“user”、“watching”和“listing”前綴,因此您可能需要考慮縮寫這些前綴。

引用亞歷克斯·德布里的話:

在 DynamoDB 中使用單個表的主要原因是使用單個請求檢索多個異構項目類型。

dynamoDB 中的表,表中的每一行都是對象。

一行中的項目以 json 對象格式查看它。

該行不支持 json 數組。

分成2張桌子。 在表A中存儲列表,在表B中存儲列表。正確設計主鍵和排序鍵,以便它可以識別屬於特定用戶的記錄。

暫無
暫無

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

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