如何在serverless.yml中为DynamoDB定义组合键?

时间:2017-10-22 02:49:41

标签: amazon-web-services amazon-dynamodb serverless-framework

我正在尝试定义一个具有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

我需要idserverroom上的密钥。用户可以位于同一服务器上的多个房间中,也可以位于多个服务器上的多个房间中。但是,在这三个键中,它始终是唯一的。

我不知道如何定义KeySchema部分。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

首先,您无法在DynamoDB中创建复合键(如在关系数据库中)。

表中的键是哈希和范围(也称为排序和可选)键。由于这限制了查询功能,DynamoDB支持创建称为全局二级索引(GSI)和本地二级索引(LSI)的索引,以扩展查询功能。

根据您的架构,由于id,server和room的组合是唯一的,因此您可以使用Hash键的串联,例如id_server_room,以便强制执行表中的项目以获得唯一性。

然后,您可以创建id,server和room作为属性。要有效地从这些属性中查询,请根据需要创建GSI。