3

我是无服务器、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文件中,我如何将全名和电子邮件定义为排序键?

请在这里帮助我。提前致谢

4

2 回答 2

1

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

这个例子是我在我的表中添加了一个时间戳排序键。

该键需要在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 文档。

AttributeDefinitions - 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

于 2019-07-19T17:04:33.880 回答
0

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

来自 AWS 文档本地二级索引

在此处输入图像描述

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

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

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

于 2018-05-24T07:53:55.990 回答