Hash 和 Range 键在 AWS DynamoDb 中究竟意味着什么?

Big*_*ile 0 amazon-web-services node.js aws-cloudformation amazon-dynamodb

我是 DynamoDb 的新手,我确实查看了 AWS 文档以及一些有关 Hash 和 Range 键的问题。毕竟,我仍然不确定它们的确切含义以及您为什么/如何使用它们。有人可以用一个例子给我一个简单的解释吗?

例如,如果我想创建一个Movie有桌子NameGenreRatingDateReleased列。创建 DynamoDb 表的正确方法是什么。在下面的示例中,我有一些 CloudFormation 来尝试创建以下内容,但我不确定我是否正确使用了 KeySchema 属性。任何帮助,将不胜感激。

MovieTable:
    Type: AWS::DynamoDB::Table
    Properties:
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: "Name"
          AttributeType: "S"
        - AttributeName: "Genre"
          AttributeType: "S"
        - AttributeName: "Rating"
          AttributeType: "N"
        - AttributeName: "DateReleased"
          AttributeType: "S"
      KeySchema:
      - AttributeName: "Name"
        KeyType: "HASH"
      - AttributeName: "Genre"
        KeyType: "RANGE"
      - AttributeName: "Rating"
        KeyType: "RANGE"
      - AttributeName: "DateReleased"
        KeyType: "RANGE"
      TimeToLiveSpecification:
        AttributeName: ExpireAfter
        Enabled: false
      SSESpecification:
        SSEEnabled: true
Run Code Online (Sandbox Code Playgroud)

Ngh*_* Do 5

这里有2个案例

情况 1:哈希键由唯一标识项目的单个属性组成。

举些例子:

一种。如果您正在设计一个表来存储学生数据,您可以将 HashKey 定义为 Student_Id

湾 如果你正在设计一个表来存储类数据,你可以将 HashKey 定义为 Class_Id

案例 2:哈希和范围键由两个属性组成,它们共同唯一地标识一个项目

举些例子:

一种。如果您正在设计一个表来存储购物车,您可以将 HashKey 定义为 Product_Id,将 Range Key(排序键)定义为 User_Id。换句话说,Production_Id 和 User_Id 的组合在您的表中必须是唯一的。

湾 如果您正在设计一个表来存储音乐信息,您可以将 HashKey 定义为艺术家,将范围键定义为“歌曲标题”。换句话说,艺术家和“歌曲标题”的组合在您的表格中必须是唯一的。

现在,对于您的用例,您可以将 Movie 表定义为

HashKey:电影名称

SortKey:发布日期

类型:属性

评价:属性

使用这种设计,这里的假设是只有 1 个“电影标题”能够在 1 个特定日期发布。换句话说,不可能有多部同名电影在同一天上映。

希望您现在可以定义 cloudformation。如果没有,请告诉我们,我们会提供帮助。