Dynamodb,你如何查询一切并利用排序键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamodb,你如何查询一切并利用排序键相关的知识,希望对你有一定的参考价值。
我已经设置了索引,第二个排序键设置为我想要的(整数时间戳)。 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
如您所见,您可以轻松查询每个分区并按排序顺序获取其中的项目。但是如果您扫描,如果排序顺序完全确定,您可能会将项目排序为[A,C,P,D,E,G,C,K,L]。此时您必须自己对项目进行排序。
有时可见的“技巧”是使用所有项目具有相等值的“虚拟”散列键,就像您在自己的答案中提到的那样。这样,您可以查询“dummy = 1”并获取根据排序键排序的项目。但是,这完全违背了散列键的用途,因为所有项目都将放在同一个分区中,因此根本不会使表格缩放。但是如果你发现自己使用的是DynamoDB,即使你拥有一个非常小的数据集,它也会起作用。但同样,对于一个小数据集和这样的用例,您可能应该首先使用其他工具,如RDS。
事实证明,您还可以为扫描添加IndexName。这有帮助。此外,如果使用排序键创建索引,则所有主索引必须相同才能进行排序。
以上是关于Dynamodb,你如何查询一切并利用排序键的主要内容,如果未能解决你的问题,请参考以下文章
DynamoDB 中分区和排序键查询的渐近性能是不是为常数 O(1)?