我对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和数量的出现
需要做的是对给定单词的dynamo进行查询,输出需要是按外观排序的URL列表。
,例如到这个文件对于单词appel,输出为:
www.cnn.com,www.appel.com,www.bla.com....
我试图创建2个表'逆索引'和'排名'第一个为单词和URL的列表和第二个为URL和他的排名,但我找不到一种方法来使查询不排序我自己
那么首先:Dynamo结构(两个表)是正确的吗?是否有一种方法来查询数据库和排序的结果?
为了依赖DynamoDB对数据进行排序,您必须使用Range Key
。也就是说,为了满足您的要求,number of appearance
必须是Range Key
的一部分。
Hash Key
可以是单词(例如Appel或Blabla),最后您可以将url存储为每个记录中的字符串数组。
来自文档:
查询结果总是按范围键排序。如果数据类型为如果range键为Number,则结果按数字顺序返回;否则,将按ASCII字符码的顺序返回结果值。默认情况下,排序顺序是升序的。颠倒顺序使用
ScanIndexForward
参数设置为false。来源:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
您可以在以下链接中找到有关DynamoDB上可用密钥类型的更多信息:
何时使用什么主键类型
dynamodb表中的哈希范围有什么用
Q:如果我使用的外观数量作为范围键,我怎么能存储字符串数组?每个值都有一个不同的数字,所以如果每个记录有一个主键(词)范围键(数字)和值(字符串数组)在这种情况下的数字是什么?
在这种情况下,我建议您使用分隔符将Range Key
与两个字段(数字和url)组成。"#")。最终的表结构应该是:
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
请注意,如果您希望尽量减少应用程序端的处理,您仍然可以将url
和appearanceNumber
作为表中的单独字段。