簡體   English   中英

在沒有全表掃描的情況下在 Dynamo DB 中隨機抽樣大小 N

[英]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.

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