2016-08-01 108 views
0

我是NoSQL数据库的新手,我已经将数据库模式从存储日期更改为UTC时间戳字符串,转换为UNIX时间戳(数字),希望我可以创建扫描或查询表达式查找表中最近的1000个项目。我还没有找到一个简单的代码片段来完成这个使用AWSDynamoDBQueryExpression类。扫描似乎没有任何排序机制,但查询可能。有任何想法吗?UNIX的AWSDynamoDBQueryExpression时间戳

回答

1

DynamoDB中没有ORDER BY功能。如果您想运行top N查询,您必须执行扫描并自行排序结果。

Mark B是正确的,查询结果可以按排序键进行排序,但仅限于查询的上下文内。查询本质上局限于单个分区键。

如果您的表很小,那么您可以在表中创建一个全局二级索引,其中分区键可以是所有项相同的属性,然后使用timestamp属性作为排序键。但请记住,一旦你的桌子变大,这将会崩溃。如果你这样做,你可能不会使用Dynamo。您最好在RDS上使用关系数据库。

+0

NoSQL听起来像是有史以来最糟糕的憎恶,谢谢帮助我理解为什么 –

+0

如何在SQL land中“排序” - 输入“Order By [column name]”。如何在NoSQL DynamoDB中“排序” - 1.创建分区键2.创建排序键3.创建包含键的全局二级索引4.确保在全局二级索引上设置了正确的查询权限5.为分区添加keyConditionExpression键6.向你选择的上帝祈祷7.旋转3次左右 –

1

首先,您需要确保timestamp字段是您的DynamoDB表(或该表上的全局二级索引的排序键)的排序键。然后你只需要运行一个查询。从the documentation

查询结果总是按排序键值排序。如果排序键的数据类型为 ,则结果以数字 顺序返回;否则,结果将按照UTF-8字节的顺序返回。默认情况下,排序顺序为 。要颠倒顺序,请将 ScanIndexForward参数设置为false。