我的表格主题 id (数字), last_message (数字)和 is_valid (数字) )。
我希望得到is_valid = 1
的结果,并按last_message
asc(或desc)排序。
我将id设置为分区键(hash),is_valid作为排序键,然后创建一个名为“lastMessageValidIndex”的全局二级索引,其中分区键为is_valid,排序键为last_message,但它不起作用。
有什么想法吗?
感谢。
答案 0 :(得分:0)
您需要查询lastMessageValidIndex。查询is_valid = 1
,您应该按last_message
答案 1 :(得分:0)
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
时,只需将记录从一个表移动到另一个表即可。