【问题标题】:Choosing Primary key for DynamoDB为 DynamoDB 选择主键
【发布时间】:2020-07-27 12:11:19
【问题描述】:

一些背景知识:我正在尝试建立一个清单来列出我在各个账户中的 AWS 资源,并且我计划使用 DynamoDB 来存储数据。这些将是我的表的列:ResourceARN、ResourceName、ResourceType、StandardTag、IsDeleted、LastUpdateTime 和 ResourceCreationDate(此字段仅适用于 Ec2 等少数资源类型)。

问题:我想使用帐户 ID、资源类型和标签名称查询我的 DDB 表。我很难为表选择主键。由于主键应该是唯一的并且必须具有 1:many 关系。因此,我不能同时使用 resourceType 和帐户 ID。我也不能使用 resourceArn 作为我的主键,因为它是 1:1 的关系。此外,使用 resourceARN 作为排序键对我来说没有意义。我知道我可以使用简单的扫描操作,但成本非常高,如果我在 DDB 中添加更多数据将需要时间。

如有任何建议或指导,我将不胜感激。

【问题讨论】:

    标签: amazon-dynamodb primary-key data-modeling


    【解决方案1】:

    简答

    • 分区键:帐户 ID
    • 排序键:<resource type>/<resource ID>

    基本原理

    排序键是连接多个属性的字符串的常见模式。由于排序键can be queried by prefix,您可以在查询中利用它:

    • 获取所有帐户资源:查询帐户 ID 分区键上的所有排序键
    • 获取一个账户的所有EC2实例:使用partition key = <your account ID>sort key begins_with('ec2-instance')查询。

    您可能会注意到 ARN 也遵循这样的 hierarchy(这可能不是巧合)。这将有效地使用 ARN 的子集作为排序键。

    一些注意事项:

    • DynamoDB 与 属性 一样重要。您无需在没有 ResourceCreationDate 的记录中包含它,这样做可以节省空间(请参阅下一点)。
    • 属性名称计为每条记录的存储,这会影响成本和吞吐量。出于这个原因,通常使用简写来表示名称(例如,rct 而不是 ResourceCreationTime)。
    • 如果需要,您可以使用 LSI(本地二级索引)按创建和更新时间排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多