我想在没有哈希键的Dynamodb上查询。我曾尝试使用扫描,但价格昂贵,因此正在寻找其他替代方法。

最佳答案

我首先要说,无法在不知道哈希键的情况下查询DynamoDB表。这是有道理的。

现在,您要使用的哈希键是否是表的主键取决于您。

例如,假设您具有下表:

╔══════════════════════╦════════════════════════╦════════════════╗
║ course_id (Hash Key) ║      course_name       ║    teacher     ║
╠══════════════════════╬════════════════════════╬════════════════╣
║ 324234               ║ Node.js for Dummies    ║ Ryan Dahl      ║
║ 213323               ║ How to train your cat  ║ Jackson Galaxy ║
║ 324090               ║ Cat Logic              ║ Jackson Galaxy ║
║ 763298               ║ Diving into .NET       ║ Eric Lippert   ║
╚══════════════════════╩════════════════════════╩════════════════╝

该表的主键和哈希键是course_id,这很好。提供唯一的哈希键可将您的表拆分为多个分区。

但是,如果我们想获得怎么办?Jackson Galaxy正在教授的所有类(class)?

我们不知道这些类(class)的course_id,这就是我们想要得到的。因此,我们发现自己时并不知道这些项的哈希键值。

这就是 GSI 发挥作用的地方。 全局二级索引允许您为表定义其他哈希键。 请注意,它不会更改主哈希键-course_id仍将是表的哈希键。

GSI仅提供一个附加的哈希键,使您能够进行更复杂的查询。

假设我们添加了一个名为teacher_index的GSI,并且我们说teacher将是我们的哈希键,而course_id将是我们的范围键(我们需要指定一个范围键,因为仅将teacher作为哈希键会生成重复的条目)。

现在,我们可以查询teacher_index并将Jackson Galaxy传递为哈希键值。结果将为213323 - How to train your cat324090 - Cat Logic

关于amazon-dynamodb - 在Dynamodb中查询,无需哈希键或扫描,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35861013/

10-11 09:08