首页 文章

DynamoDB:排序和过滤索引

提问于
浏览
1

我有一个 Threadsid (数字), last_message (数字)和 is_valid (数字) .

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

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

任何的想法?

谢谢 .

2 回答

  • 0

    你需要查询lastMessageValidIndex . 查询 is_valid = 1 ,你应该得到 last_message 排序的结果

  • 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 时,只需将记录从一个表移动到另一个表即可 .

相关问题