DynamoDb是否可以使用给定的排序键来获取所有项目?

时间:2019-05-27 17:08:28

标签: amazon-web-services amazon-dynamodb

作为主键,我有一个食谱的ID,排序键是食物的类型(早餐,进餐,点心等)。

是否可以通过扫描或查询来获取具有给定排序键的所有项目?

1 个答案:

答案 0 :(得分:1)

正如其他人在评论中指出的那样,您无法查询排序键,因为没有操作可以给出具有相同排序键的项目列表。

实际上,排序键的全部原因通常是为了在特定分区中订购商品。

将两者放在一起,您需要的是一种按食物类型对商品进行分区,然后对其进行查询的方法。输入Global Secondary Index (GSI)

借助GSI,您可以将表中的数据编入索引,从而食物类型成为分区键,而其他一些属性则成为排序键。然后,通过查询就可以获取与特定食物类型匹配的所有项目。

请记住以下几点:

  • GSI就像另一张桌子:它消耗您要向其收费的容量
  • GSI最终是一致的,这意味着表中的更改可能需要一些时间才能反映在GSI中
  • 如果您最终创建的GSI中,分区键的选择导致了很大的分区,那么如果任何一个分区收到大量请求,就会导致节流(吞吐量降低)

更多准则:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general.html

但是在开始创建GSI之前,请先考虑一下表的架构:选择分区键似乎不太理想。一方面,将食谱ID用作分区键非常有用,因为它可能会导致很好的数据传播,但另一方面,您将无法在不创建GSI的情况下在表上使用查询。

可以考虑创建一个由食物类型和其他属性组成的分区键,而不是将配方ID作为分区键。这样,您实际上可以查询食物类型,或者发出多个查询以检索特定食物类型的所有项目。