【问题标题】:How to create a DynamoDb with hash key of two columns and a column as a range key如何使用两列的哈希键和一列作为范围键创建 DynamoDb
【发布时间】:2020-08-06 09:35:18
【问题描述】:

我想创建一个 dynamodb 表,使用艺术家和歌曲等两列作为 HashKey,并且有一列“onYEAR”作为范围键。我该怎么做,谁能给我推荐keySchema。

 KeySchema:
        - AttributeName: artist
          KeyType: HASH
        - AttributeName: song
            KeyType: HASH
        - AttributeName: onYEAR
            KeyType: RANGE

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries


    【解决方案1】:

    不清楚你想通过使两个键属性成为哈希键来实现什么。

    如果您希望将两个属性 together 用作一对键(在其他数据库中称为“复合”哈希键),则不能 - DynamoDB 不支持此功能.它可以通过创建一个包含两个键的连接(例如)的属性来近似。

    但是,如果您希望您的项目可以通过两个键中的任何 一个 与范围键一起检索,那么您需要选择一个作为哈希键,第二个作为哈希键全局二级索引 (GSI) 的哈希键。

    【讨论】:

    • 谢谢先生。但我还需要具有与 CompositePrimaryKey 完全不同的列的全局二级索引 (GSI)。 //这里我需要两列Status,AssetsID作为哈希键的一部分。我需要code GlobalSecondaryIndexes: - IndexName: Gsi-Index-Name KeySchema: - AttributeName: AssetsID-Status //这里我需要两列Status,AssetLogId作为哈希键的一部分。 KeyType: HASH code 我能知道怎么做吗?有两个 GSI 哈希键,但没有范围键。如果需要范围键,它的可能性是什么
    • @Nadav Har'El:使用分隔符将它们连接到另一列有什么缺点吗?
    【解决方案2】:

    就像之前的回答所说:你不能那样做。但你可以做不同的事情。

    首先,KEY 必须是唯一的。无论您只使用散列还是使用复合键,结果键在表中都必须是唯一的。但我想你已经知道了。

    其次,您需要了解每个键的行为/功能。散列键也称为分区键,因为这就是 ddb 对表进行分区的方式。范围键也称为排序键,因为 ddb 会根据该键对分区内的数据进行排序。

    通过了解您计划如何访问数据来为您的表建模很重要,因为您想使用散列来检索 THE GROUP 和要在组内搜索的范围。

    因此,哈希键应该是您想要对项目进行分组的键,而范围键应该是您想要过滤数据的键。

    以艺术家/歌曲/年份为例,假设您要访问该艺术家制作的所有歌曲,那么您可以只查询该艺术家,ddb 将返回所有歌曲。

    假设您还想访问艺术家的歌曲,但只能访问以字母“A”开头的歌曲。 使用歌曲作为范围键可以做到这一点。

    但是假设你想要更多。您希望能够列出仅在特定年份制作的歌曲。然后,您想创建一个 LSI(本地二级索引),其中哈希键相同,但您可以创建一个不同的范围键,将年份和歌曲组合在一起。如果您只使用年份,那么它将不是唯一的,因此您将歌曲名称添加到其中。例如:'1996_aqua' 这将允许您过滤从 1996 年开始的项目,因此基本上返回由特定艺术家制作并在特定年份制作的歌曲。

    所以我想说的是,当您在 ddb 中设计密钥时,您必须知道要如何访问数据(访问模式),因为这是您应该如何构建这些密钥的因素。

    【讨论】:

      【解决方案3】:

      您可以通过连接来组合两列或多列,并最终将完整的字符串用 MD5 散列到另一列中,并将其用作散列键。

      【讨论】:

        猜你喜欢
        • 2016-01-21
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-28
        相关资源
        最近更新 更多