DynamoDB:排序和过滤索引

时间:2016-08-09 15:53:55

标签: amazon-web-services amazon-dynamodb

我的表格主题 id (数字), last_message (数字)和 is_valid (数字) )。

我希望得到is_valid = 1的结果,并按last_message asc(或desc)排序。

我将id设置为分区键(hash),is_valid作为排序键,然后创建一个名为“lastMessageValidIndex”的全局二级索引,其中分区键为is_valid,排序键为last_message,但它不起作用。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您需要查询lastMessageValidIndex。查询is_valid = 1,您应该按last_message

排序

答案 1 :(得分:0)

noSQL(以及DynamoDB)的一个难点是你不能只查询所有内容。您只能查询索引,索引必须是唯一的(哈希范围组合)。如果有两行具有相同的last_validlast_message值,则只会在GSI中插入一行。

分区键is_valid只有一些变量(可能只有0和1),这会损坏分区(因此名称)。如果数据库被大量使用,您将遇到问题(另请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions)。

如果is_valid没有相对频繁地更改,您可以考虑创建2个表:一个只有有效,一个只有无效的线程。然后,您可以在正确的表中查询主键。切换is_valid时,只需将记录从一个表移动到另一个表即可。