Amazon dynamodb 使用无服务器框架为dynamodb设置复合排序键

Amazon dynamodb 使用无服务器框架为dynamodb设置复合排序键,amazon-dynamodb,serverless-framework,Amazon Dynamodb,Serverless Framework,我是dynamodb和serverless的新手,我已经读过。我认为它们可以解决我的问题,但我不完全确定如何实施它们。在我的例子中,我有一个带有Post实体的表,该表具有以下字段,如下所示: post_id <string> | user_id <string> | tags <string[]> | public <boolean>| other post data attributes... 这是我以前设置的 PostsDynamoDBTab

我是dynamodb和serverless的新手,我已经读过。我认为它们可以解决我的问题,但我不完全确定如何实施它们。在我的例子中,我有一个带有Post实体的表,该表具有以下字段,如下所示:

post_id <string> | user_id <string> | tags <string[]> | public <boolean>| other post data attributes...
这是我以前设置的

PostsDynamoDBTable:
      Type: 'AWS::DynamoDB::Table'
      Properties:
        AttributeDefinitions:
          - AttributeName: postId
            AttributeType: S
          - AttributeName: userId
            AttributeType: S
          - AttributeName: createdAt
            AttributeType: S
        KeySchema:
          - AttributeName: postId
            KeyType: HASH
          - AttributeName: userId
            KeyType: RANGE
        BillingMode: PAY_PER_REQUEST
        TableName: ${self:provider.environment.POSTS_TABLE}
        GlobalSecondaryIndexes:
          - IndexName: ${self:provider.environment.USER_ID_INDEX}
            KeySchema:
              - AttributeName: userId
                KeyType: HASH
              - AttributeName: public
                KeyType: RANGE
            Projection:
              ProjectionType: ALL

复合排序键是指如何使用排序键

在serverless.yml中,您需要做的唯一一件事就是定义您在这里完成的排序键名称。是否将该排序键用作复合排序键取决于应用程序。您可以将排序键的值设置为复合值,例如CABEVERLYHILLS90210,也可以不设置为复合值,例如BEVERLYHILLS。DynamoDB和Serverless框架都不关心,更多的是关于如何在应用程序逻辑中使用键

请记住,DynamoDB允许您在一个表中存储多个实体。这些实体可能具有不同的主键分区键和排序键。出于这个原因,我建议命名分区键PK和排序键SK

例如,假设您将Post和用户实体定义为具有以下主键:

             Partition Key            Sort Key
Post        POST#<post_id>           <timestamp>
User        USER#<user_id>           USER#<user_id>
在Post的情况下,排序键可以是制作Post的时间戳。对于用户,排序键可以是用户的ID。那么,在定义表时,如何命名排序键字段


我喜欢将排序键命名为SK,以提醒您正在使用该字段来组织数据。当然,您可以随意命名它,但是如果您将它命名为userId,就像您在serverless.yml文件中所做的那样,您可能会忘记该字段可以包含用户id以外的内容

复合排序键是指如何使用排序键

在serverless.yml中,您需要做的唯一一件事就是定义您在这里完成的排序键名称。是否将该排序键用作复合排序键取决于应用程序。您可以将排序键的值设置为复合值,例如CABEVERLYHILLS90210,也可以不设置为复合值,例如BEVERLYHILLS。DynamoDB和Serverless框架都不关心,更多的是关于如何在应用程序逻辑中使用键

请记住,DynamoDB允许您在一个表中存储多个实体。这些实体可能具有不同的主键分区键和排序键。出于这个原因,我建议命名分区键PK和排序键SK

例如,假设您将Post和用户实体定义为具有以下主键:

             Partition Key            Sort Key
Post        POST#<post_id>           <timestamp>
User        USER#<user_id>           USER#<user_id>
在Post的情况下,排序键可以是制作Post的时间戳。对于用户,排序键可以是用户的ID。那么,在定义表时,如何命名排序键字段

我喜欢将排序键命名为SK,以提醒您正在使用该字段来组织数据。当然,您可以随意命名它,但是如果您将它命名为userId,就像您在serverless.yml文件中所做的那样,您可能会忘记该字段可以包含用户id以外的内容