【问题标题】:How to define sorting key in serverless.yaml如何在 serverless.yaml 中定义排序键
【发布时间】:2018-11-03 02:10:21
【问题描述】:

我是无服务器、AWS 和 lambda 函数的新手。
我想知道如何在 serverless.yaml 文件中定义排序键,以及当我们从 DynamoDB 表中获取数据时如何对数据进行 ASC 或 DEC 顺序排序?

我也想知道假设我有像这样的用户表字段

ID(Primary key)
Fullname(String)
Email(String)
City(String)
State(String)
PhoneNumber(String)

我想在全名和电子邮件列上按 ASC 或 DEC 顺序排序。所以,据我了解,我需要将 Fullname 和 email 列定义为排序键。

这是我的 serverless.yaml 文件

resources:
Resources:
UserDynamoDbTable:
  Type: 'AWS::DynamoDB::Table'
  DeletionPolicy: Retain
  Properties:
    AttributeDefinitions:
      -
        AttributeName: id
        AttributeType: S
    KeySchema:
      -
        AttributeName: id
        KeyType: HASH
    ProvisionedThroughput:
      ReadCapacityUnits: 1
      WriteCapacityUnits: 1
    TableName: 'user'

那么,我如何在一个表中定义多个排序键(这里是全名和电子邮件)?

在上面的.yaml 文件中,我如何将全名和电子邮件定义为排序键?

请帮帮我。 提前致谢

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb aws-serverless


    【解决方案1】:

    您对排序键的理解看起来是错误的。排序键的工作完​​全依赖于哈希键。您可以将其视为某个 HASH Key 的子类别。 Dynamodb 将所有内容存储在同一个 HASH Key 中。排序键用于告诉它们在存储在一起时是如何排序的。

    来自 AWS 文档Local Secondary Indexes

    DynamoDB 存储具有相同分区键值的所有项目 连续地。在这个例子中,给定一个特定的 ForumName,一个 Query 操作可以立即找到该论坛的所有主题。 在具有相同分区键值的一组项目中,项目 按排序键值排序。如果排序键(主题)也是 在查询中提供,DynamoDB 可以缩小结果 返回——例如,返回“S3”论坛中的所有主题 具有以字母“a”开头的主题

    我建议研究 DynamoDB 的工作原理,这将有助于您设计应用程序数据模型。

    据我了解,您希望按全名和电子邮件对该表中的所有项目进行排序。这意味着它们都需要存储在一起,这意味着它们需要具有相同的哈希密钥,这意味着它们将被写入相同的“分区”。它肯定不是一个好的设计。有一个像Time-Series Data 这样的模式,它使用相同的逻辑但以不同的方式。看一看。但它不是你的情况。 DynamoDB 不适合您想要的此类操作。您应该更改数据模型设计或为该排序要求寻找其他数据库选项。

    【讨论】:

      【解决方案2】:

      在 serverless.yml 文件中定义主排序键的示例:

      这个例子是我在表中添加了时间戳排序键吗?

      这个key需要在AttributeDefinitionsKeySchema下定义。

      resources:
        Resources:
          MyTable:
            Type: 'AWS::DynamoDB::Table'
            DeletionPolicy: Retain
            Properties:
              TableName: your_table_name
              AttributeDefinitions:
                -
                  AttributeName: id
                  AttributeType: S
                -
                  AttributeName: timestamp
                  AttributeType: N
              KeySchema:
                -
                  AttributeName: id
                  KeyType: HASH
                -
                  AttributeName: timestamp
                  KeyType: RANGE
      
      

      我查看了定义,它遵循 Cloud Formations 文档。

      属性定义 - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-keyschema.html

      KeySchema - https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeDefinition.html

      【讨论】:

        猜你喜欢
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 2018-09-28
        • 2012-04-07
        相关资源
        最近更新 更多