带排序的 DynamoDb?

DynamoDb with sort?

我对 Dynamo Db 概念很陌生,如果我的问题有点愚蠢,请原谅我 我有一个文件看起来像这样

Appel,www.appel.com,www.cnn.com,www.bla.com....
Blabla,www.test.com,www.fox.com,www.bla.com.....
test,www.test.com,www.fox.com,www.bla.com...
www.appel.com,300
www.cnn.com,400

等等。简而言之,每一行都是 1: 一个词和所有 URL 中的她 2:出场次数URL和出场次数

需要做的是在给定单词的情况下查询发电机,输出需要是按外观排序的 URL 列表。

例如这个文件 对于单词 appel,输出为:

www.cnn.com,www.appel.com,www.bla.com....

我尝试创建 2 个表“Invert-index”和 'rank',第一个用于 URL 的单词和列表,第二个用于 URL 和他的排名,但我无法找到一种不对自己进行排序的查询方式

所以首先:Dynamo 结构(两个表)是否正确? 有没有办法查询数据库并对结果进行排序?

为了依靠 DynamoDB 对数据进行排序,您必须使用 Range Key。也就是说,为了满足您的要求,number of appearance 必须是 Range Key.

的一部分

然后 Hash Key 可以是单词(例如 Appel 或 Blabla),最后您可以将 url 作为字符串数组存储在每个记录中。

来自文档:

Query results are always sorted by the range key. If the data type of the range key is Number, the results are returned in numeric order; otherwise, the results are returned in order of ASCII character code values. By default, the sort order is ascending. To reverse the order use the ScanIndexForward parameter set to false. Source: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

您可以在以下链接中找到有关 DynamoDB 上可用密钥类型的更多信息:

问:如果我使用出现次数作为范围键,如何存储String数组?每个值都有一个不同的数字,所以如果每个记录都有一个主键(单词)范围键(数字)和值(字符串数组)在这种情况下是多少?

在这种情况下,我建议您使用分隔符(例如“#”)将 Range Key 与两个字段(数字和 url)组成。您最终的 table 结构将是:

Hash Key : <Word>
Range Key : <AppearanceNumber>#<Url>

您的 Range Key 属于 String 类型,它仍然可以对您的数据进行排序,因为 <AppearanceNumber> 是前缀。

例如,通过 <Word>'Appel' 进行查询,您将获得以下结果:

Appel,900#www.appel.com
Appel,800#www.cnn.com
Appel,700#www.bla.com

请注意,您仍然可以在 table 中将 urlappearanceNumber 作为单独的字段,以防您希望最大限度地减少应用程序端的处理。