Dynamodb,你如何查询一切并利用排序键

问题描述 投票:0回答:2

我已经设置了索引,第二个排序键设置为我想要的(整数时间戳)。 API一直在抱怨我没有给它一个KeyConditionExpression。然后,如果我给它一个,它说必须指定id。我已经尝试强制它只是给我一些使用id <> null并且它仍然不会这样做。这有可能吗?也许是时候摆脱发电机,如果它不能完成这个完全简单的任务。

对于上帝的爱,我所要做的就是查询整个表并让它使用我的排序键。我会在SQL小时前做到这一点..

amazon-dynamodb
2个回答
4
投票

首先,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

如您所见,您可以轻松查询每个分区并按排序顺序获取其中的项目。但是如果您扫描,如果排序顺序完全确定,您可能会将项目排序为[A,C,P,D,E,G,C,K,L]。此时您必须自己对项目进行排序。

有时可见的“技巧”是使用所有项目具有相等值的“虚拟”散列键,就像您在自己的答案中提到的那样。这样,您可以查询“dummy = 1”并获取根据排序键排序的项目。但是,这完全违背了散列键的用途,因为所有项目都将放在同一个分区中,因此根本不会使表格缩放。但是如果你发现自己使用的是DynamoDB,即使你拥有一个非常小的数据集,它也会起作用。但同样,对于一个小数据集和这样的用例,您可能应该首先使用其他工具,如RDS。


-2
投票

事实证明,您还可以为扫描添加IndexName。这有帮助。此外,如果使用排序键创建索引,则所有主索引必须相同才能进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.