0

我对 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 结构(两张表)是否正确?有没有办法查询数据库并对结果进行排序?

4

1 回答 1

1

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

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

从文档中:

查询结果始终按范围键排序。如果范围键的数据类型是数字,则以数字顺序返回结果;否则,结果将按 ASCII 字符代码值的顺序返回。默认情况下,排序顺序是升序。要反转顺序,请使用ScanIndexForward设置为 false 的参数。来源:http ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

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

什么时候使用什么主键类型

dynamodb 表中的哈希范围有什么用

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

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

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

Range KeyString类型仍然可以将您的数据排序为<AppearanceNumber>前缀。

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

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

请注意,如果您想最小化应用程序端的处理,您仍然可以在表中使用url和 作为单独的字段。appearanceNumber

于 2015-06-09T14:19:24.230 回答