我有一个Dynamodb表,它只包含一个散列键(分区键)。这个表没有范围键(排序键)。哈希键是一个数值(例如:- 1,2,3…N)当我查询或扫描这个表时,他们发送结果的顺序是什么?如果有一个范围键,它显然会根据范围键值按升序对结果进行排序。但是在没有RANGE KEY的情况下,它是如何表现的呢?
DynamoDB不为从表中扫描项提供任何排序保证(隐式或显式)。项目或多或少按照内部哈希函数将项目映射到表分区的顺序返回,但没有隐式或显式的顺序保证。
即使使用排序键,也仅在同一分区键的项内隐含排序。因此,即使您在表上有一个范围键,那也只允许您一次按照特定散列键的顺序查询项。
如果您需要订购表格中的所有项目,那么您有几个选择:
- 扫描客户端的所有数据和订单
- 创建一个全局二级索引,为所有项目的分区键使用一个通用值,并查询
- 设计一个互补的存储层来提供排序
需要强调的是,上面的前两个选项只适用于相对较小的表。一旦表的空间达到10GB左右,那么使用通用键的GSI就会成为一个重大瓶颈,当然,扫描和排序整个表也会出现问题。