我正在尝试定义一个具有3列复合键的dynamodb表。这可能吗?
我看过有这样代码的示例和教程:
resources:
Resources:
TodosDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: id
AttributeType: S
KeySchema:
-
AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.DYNAMODB_TABLE}
但是只有一个列和一个键。我的表看起来像这样:
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: N
- AttributeName: server
AttributeType: S
- AttributeName: room
AttributeType: S
- AttributeName: friendlyName
AttributeType: S
我需要id
,server
和room
上的密钥。用户可以位于同一服务器上的多个房间中,也可以位于多个服务器上的多个房间中。但是,在这三个键中,它始终是唯一的。
我不知道如何定义KeySchema
部分。有什么帮助吗?
答案 0 :(得分:3)
首先,您无法在DynamoDB中创建复合键(如在关系数据库中)。
表中的键是哈希和范围(也称为排序和可选)键。由于这限制了查询功能,DynamoDB支持创建称为全局二级索引(GSI)和本地二级索引(LSI)的索引,以扩展查询功能。
根据您的架构,由于id,server和room的组合是唯一的,因此您可以使用Hash键的串联,例如id_server_room
,以便强制执行表中的项目以获得唯一性。
然后,您可以创建id,server和room作为属性。要有效地从这些属性中查询,请根据需要创建GSI。