我是 dynamodb 的新手,并且在寻找一种无需全表扫描即可随机获取项目的方法时遇到了一些麻烦,我发现的大多数算法都包含全表扫描我也在考虑我们没有其他信息的情况表的(像列和列类型这样的信息是未知的)有没有办法这样做
问问题
71 次
2 回答
0
您可以使用随机生成的独占开始键进行扫描或查询操作进行随机采样。独占开始键不必匹配表中的记录。它只需要遵循表/索引的键结构。
于 2021-08-18T15:08:04.707 回答
-1
与有关 DynamoDB 中查询的大多数问题一样,您如何构建数据取决于您希望如何查询它。
对于随机抽样之类的事情,您必须使其符合 DynamoDB 的以下核心约束:
- 您必须提供分区键
- 您可以提供排序键
因此,使用“单表”类型设计,您可以像这样构建数据:
PK | SK | 我的值 |
---|---|---|
我的字典 | 6caaf1e3-eb8d-404a-a2ae-97d6682b0224 | 富 |
我的字典 | 1c5496e8-c660-4b4e-980f-4abfb1942863 | 酒吧 |
我的字典 | 56551340-fff8-4824-a5be-70fcaece2e1a | 巴兹 |
my_other_dict | 520a7b37-233c-49dd-87da-77d871d98c92 | 测试1 |
my_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,您将得到一个随机结果。
上面的特定查询实际上没有返回任何内容,因此您需要重试直到得到结果。
此外,我还没有完成数学计算(谁有?),但我想像这样的定期查询不会产生完全随机的分布,尤其是对于小型数据集。
于 2021-08-18T12:18:14.940 回答