![](/img/trans.png)
[英]How to fetch all items from dynamo db without scan in lambda function
[英]Random Sampling of size N in Dynamo DB without full Table scan
我是 dynamodb 的新手,在尋找一種無需全表掃描的情況下隨機獲取項目的方法時遇到了一些麻煩,我發現的大多數算法都包含全表掃描我也在考慮我們沒有其他信息的情況表的(像列和列類型這樣的信息是未知的)有沒有辦法這樣做
您可以通過使用隨機生成的獨占開始密鑰進行掃描或查詢操作來隨機采樣。 獨占開始鍵不必匹配表中的記錄。 它只需要遵循表/索引的關鍵結構。
與有關 DynamoDB 中的查詢的大多數問題一樣,您如何構建數據取決於您希望如何查詢它。
對於像隨機抽樣這樣的事情,你必須讓它確認 DynamoDB 的以下核心約束:
因此,使用“單表”類型設計,您可以像這樣構建數據:
PK | SK | 我的值 |
---|---|---|
我的字典 | 6caaf1e3-eb8d-404a-a2ae-97d6682b0224 | 富 |
我的字典 | 1c5496e8-c660-4b4e-980f-4abfb1942863 | 酒吧 |
我的字典 | 56551340-fff8-4824-a5be-70fcaece2e1a | 巴茲 |
我的_other_dict | 520a7b37-233c-49dd-87da-77d871d98c92 | 測試1 |
我的_other_dict | 65ccd54e-72c3-499d-a3a7-0cd989252607 | 測試2 |
PK 是您要查找的隨機事物集合的標識符。 SK 是一個隨機的 UUID。 myVal
包含您要返回的值。
您可以通過以下方式查詢此數據庫:
SELECT * FROM "my-table" WHERE PK = 'my_dict' AND SK < '06a04e20-b239-48f2-a205-552eb61fef35'
通過使用 UUID 作為 SK 進行查詢,您將獲得表中第一個 UUID 與您查詢的 UUID 接近的項目。 通過在每次查詢時使用隨機 uuid,您將得到一個隨機結果。
上面的特定查詢實際上沒有返回任何內容,因此您需要重試直到獲得結果。
此外,我還沒有計算過(誰計算過?),但我認為像這樣的定期查詢不會生成完全隨機的分布,尤其是對於小數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.