【发布时间】:2017-06-02 19:33:40
【问题描述】:
在 AWS DynamoDB 中,您必须指定一个 `partition key,这使它像 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,因此partition key 上不允许使用例如BETWEEN 或OR 或IN
替代query 有scan 但是
- 扫描成本高(慢)
- 您无法在扫描时排序
更新
所以我意识到我可以使用排序键,然后在这种情况下partition key 可以是我的表名,所以我需要更改我的词汇表
- 表格 -> 数据库
- 分区键 -> 表/集合
- 排序键 -> 主键/ObjectId
示例: 表 my-api 与 partition key -> className 和 sort key -> id
my-api
className | id | username | title
_User | 0 | "bingo" |
_User | 1 | "mimi" |
_Song | 0 | | "You with me"
这是一个奇怪的设计
【问题讨论】:
-
查询用于按分区键以外的列进行过滤,例如按排序键
标签: amazon-web-services amazon-dynamodb