【问题标题】:DynamoDb with sort?DynamoDb 排序?
【发布时间】:2015-06-08 13:24:45
【问题描述】:

我对 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 列表。

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

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

我尝试创建 2 个表“反转索引”和“排名”,第一个用于单词和 URL 列表,第二个用于 URL 和他的排名,但我无法找到一种方法来进行查询整理自我

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

【问题讨论】:

    标签: node.js sorting amazon-dynamodb inverted-index


    【解决方案1】:

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

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

    来自文档:

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

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

    When to use what primary key type

    What is the use of a hash range in a dynamodb table

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

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

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

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

    例如,通过&lt;Word&gt;'Appel' 进行查询,您会得到以下结果:

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

    请注意,您仍然可以将 urlappearanceNumber 作为单独的字段放在表中,以防您希望最小化应用程序端的处理。

    【讨论】:

    • 感谢您的回答非常有帮助。我有一个问题.. 如果我使用出现次数作为范围键,我如何存储字符串数组?每个值都有一个不同的数字所以如果每个记录都有一个主键(单词)范围键(数字)和值(字符串数组)在这种情况下数字是多少?
    • 请参阅已审核的答案以获取有关此附加问题的更多详细信息,问候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多