我想在没有哈希键的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 cat
和324090 - Cat Logic
。关于amazon-dynamodb - 在Dynamodb中查询,无需哈希键或扫描,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35861013/