1

我是 dynamodb 的新手,并且在寻找一种无需全表扫描即可随机获取项目的方法时遇到了一些麻烦,我发现的大多数算法都包含全表扫描我也在考虑我们没有其他信息的情况表的(像列和列类型这样的信息是未知的)有没有办法这样做

4

2 回答 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 回答