我有一个 Threads 表 id (数字), last_message (数字)和 is_valid (数字) .
我希望得到 is_valid = 1 的结果,并按 last_message asc(或desc)排序 .
is_valid = 1
last_message
我将id设置为分区键(hash),is_valid作为排序键,然后创建名为“lastMessageValidIndex”的全局二级索引,其中分区键为is_valid,排序键为last_message,但它不起作用 .
任何的想法?
谢谢 .
你需要查询lastMessageValidIndex . 查询 is_valid = 1 ,你应该得到 last_message 排序的结果
noSQL(以及DynamoDB)的一个难点是你不能只查询一切 . 您只能查询索引,索引必须是唯一的(哈希范围组合) . 如果有两行具有相同的 last_valid 和 last_message 值,则只有一行将插入GSI中 .
last_valid
分区键 is_valid 只有一些变量(可能只有0和1),这会损坏分区(因此名称) . 如果数据库被大量使用,您将遇到问题(另请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions) .
is_valid
如果 is_valid 没有相对频繁地更改,您可以考虑创建2个表:一个只有有效,一个只有无效的线程 . 然后,您可以在正确的表中查询主键 . 切换 is_valid 时,只需将记录从一个表移动到另一个表即可 .
2 回答
你需要查询lastMessageValidIndex . 查询
is_valid = 1
,你应该得到last_message
排序的结果noSQL(以及DynamoDB)的一个难点是你不能只查询一切 . 您只能查询索引,索引必须是唯一的(哈希范围组合) . 如果有两行具有相同的
last_valid
和last_message
值,则只有一行将插入GSI中 .分区键
is_valid
只有一些变量(可能只有0和1),这会损坏分区(因此名称) . 如果数据库被大量使用,您将遇到问题(另请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions) .如果
is_valid
没有相对频繁地更改,您可以考虑创建2个表:一个只有有效,一个只有无效的线程 . 然后,您可以在正确的表中查询主键 . 切换is_valid
时,只需将记录从一个表移动到另一个表即可 .