AWS DynamoDB

时间:2017-05-31 18:46:16

标签: amazon-web-services amazon-dynamodb

在AWS DynamoDB中,您必须指定一个`分区键,这使它像GetItem一样工作...因为分区键是唯一的,所以它应该只返回一个项,所以如果我知道该项的ID,它再也没有意义了!因为查询意味着约束......

那么有人可以举例说明查询一个分区键可以返回多个项吗?

# Create single-attribute primary key table
aws dynamodb create-table --table-name testdb6 --attribute-definitions '[{"AttributeName": "Id", "AttributeType": "S"}]' --key-schema '[{"AttributeName": "Id", "KeyType": "HASH"}]' --provisioned-throughput '{"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}' 

# Populate table
aws dynamodb put-item --table-name testdb6 --item '{ "Id": {"S": "1"}, "LastName": {"S": "Lopez"}, "FirstName": {"S": "Maria"}}'
aws dynamodb put-item --table-name testdb6 --item '{ "Id": {"S": "2"}, "LastName": {"S": "Fernandez"}, "FirstName": {"S": "Augusto"}}'

# Query table using only partition attribute
aws dynamodb query --table-name testdb6 --select ALL_ATTRIBUTES --key-conditions '{"Id": {"AttributeValueList": [{"S": "1"}], "ComparisonOperator": "EQ"}}'

您也只能使用EQ运营商partition key,因此BETWEEN上不允许使用ORINpartition key }}

替代queryscan

  • 扫描很昂贵(慢)
  • 您无法对扫描进行排序

更新

所以我意识到我可以使用排序键,然后在这种情况下partition key可以是我的表名,所以我需要更改我的词汇

  • - >数据库
  • 分区键 - >表/集合
  • 排序键 - >主键/ ObjectId

示例: my-api partition key -> classNamesort key -> id

my-api
   className | id | username | title
   _User     |  0 | "bingo"  |
   _User     |  1 | "mimi"   |
   _Song     |  0 |          | "You with me"

这是奇怪的设计

3 个答案:

答案 0 :(得分:2)

如果表中分区键和排序键按分区键查询,则会为您提供多个项目。

  • 分区键 - 必须使用查询API
  • 排序键 - 使用查询API时可选

获取API: -

  

对于复合主键,您必须为两者提供值   分区键和排序键。

因此,Get API将始终只返回一个项目。此外,没有过滤表达式可以按非键属性进行过滤。

答案 1 :(得分:0)

查询是基于主键或索引键属性查找项目。主键可以有一个分区键(哈希键)和一个可选的范围键。如果Range键存在,那么您可以拥有多个具有相同分区键的记录。因此,要对此类复合主键执行GetItem操作,您需要使用哈希键指定Range键。

此外,您可以指定多个全局二级索引(GSI)和本地二级索引(LSI),通过它们可以查询非关键属性。

因此,查询操作提供了根据主键,LSI或GSI的哈希键和范围键的属性查找项目的方法。

现在,您使用的示例当然不是设计架构的好方法。

表!=数据库

表==表和DynamoDB包含所有表。

UserSong等需要存储在不同的表中。然后,您可以指定idusername以进一步唯一标识表格中的项目。每个项目都可以被认为是RDBMS中的记录。详细了解如何选择主键和索引以及AWS DynamoDB Developer Guide

中的所有信息

答案 2 :(得分:0)

如果没有定义排序键,分区键将始终返回唯一结果。 配置表的排序键意味着分区键和排序键之间的组合必须是唯一的。 有关定义表格结构的最佳实践,请参阅this

相关问题