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

Ale*_*dez 2 amazon-web-services amazon-dynamodb

作为主键,我有一个食谱的 id,排序键是食物的类型(早餐、正餐、小吃等)。

有没有办法通过扫描或查询来获取具有给定排序键的所有项目?

Mik*_*scu 5

正如其他人在评论中指出的那样,您不能查询排序键,因为没有提供具有相同排序键的项目列表的操作。

事实上,排序键的全部原因通常是为了对特定分区中的项目进行排序。

将两者放在一起,您需要的是一种按食物类型划分项目然后对其进行查询的方法。输入全球二级索引 (GSI)

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

有几件事情要记住:

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

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

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

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