我已经有一个索引,第二个排序键设置为我想要的值(整数时间戳记)。API一直在抱怨我没有给它KeyConditionExpression。然后,如果我给它一个,它说必须指定id。我试图强迫它只使用id <> null给我所有东西,但它仍然不会这样做。这有可能吗?如果它不能完成这项非常简单的任务,也许是时候摆脱发电机了。
对于上帝的爱,我要做的就是查询整个表并使用我的排序键。我早在几个小时前就可以在SQL中进行此操作。
首先,DynamoDB是一个NOSQL数据库,因此故意不是SQL。也许您不应该期望能够像过去那样执行类似SQL的查询,而对于这是两种完全不同的数据库类型(各有优缺点)感到沮丧。
DynamoDB中的记录使用哈希键进行分区,并且可以选择在每个分区中进行排序。应该选择哈希键,以使项目尽可能均匀地分布在分区上。分区的使用使DynamoDB具有极高的可伸缩性和快速性。但是,如果您需要扫描所有项目并按排序的顺序进行处理,则可能是您使用了错误的工具来完成这项工作,或者您需要在客户端对项目进行分类。
扫描操作将简单地遍历所有分区,并从每个分区返回所有项目。此时,这些项目只能在其各自的分区内进行排序。
例如,考虑将一组数据划分为3个分区:
Partition A Partition B Partition B
Sort key Sort key Sort key
A D C
C E K
P G L
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以轻松查询每个分区并按排序顺序获取其中的项目。但是,如果您进行扫描,则如果排序顺序是完全确定的,则可能会得到按[A,C,P,D,E,G,C,K,L]排序的项目。此时,您必须自己对项目进行排序。
有时会看到一个“技巧”,就是对所有项目使用具有相等值的“虚拟”哈希键,就像您在自己的答案中提到的那样。这样,您可以查询“ dummy = 1”并获得根据排序键排序的项目。但是,这完全破坏了哈希键的目的,因为所有项都将放在同一分区中,因此根本无法扩展表规模。但是,即使您有一个很小的数据集,如果您发现自己使用DynamoDB,也绝对可以。但是,同样,在使用较小的数据集和类似用例的情况下,您可能首先应该使用其他工具,例如RDS。
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |