【问题标题】:How to add add a 3rd indexable attribute to DynamoDb through the CDK?如何通过 CDK 向 DynamoDb 添加第三个可索引属性?
【发布时间】:2021-01-20 15:18:52
【问题描述】:
我正在尝试遵循一个教程,该教程通过称为索引重载的方法解释了 DynamoDB 的正确用法。教程是here。我正在通过 CDK 创建 DynamoDB。
问题:
教程提到索引将包括:分区键、排序键和称为“数据”的第三个字段,它本身将用作排序键:
创建具有三个通用属性的 DynamoDB 表:“分区键”、“排序键”和“数据”
三个通用属性将用于支持两个索引:主表索引,以pk为分区,sk为排序键,全局二级索引,以sk为分区,data为排序。
正如您在上面看到的,此逻辑涉及 3 个属性的存在。但是 AWS CDK 允许添加分区键和排序键 - 初始架构描述中不能包含其他属性。当没有“数据”属性时,如何创建如上所述的包含“数据”属性的索引?
【问题讨论】:
标签:
amazon-web-services
database-design
amazon-dynamodb
aws-cdk
【解决方案1】:
在使用 CDK 创建 DynamoDB 表时,您有几个 methods at your disposal 可以帮助您定义二级索引。
例如,这里有一个 CDK (javascript) 的 sn-p,它创建了一个 DynamoDB 表并添加了二级索引:
const table = new dynamodb.Table(this, "Table", {
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, // Use on-demand billing mode
sortKey: {name: "SK", type: dynamodb.AttributeType.STRING},
partitionKey: {name: "PK", type: dynamodb.AttributeType.STRING}
});
table.addGlobalSecondaryIndex({
indexName: "GSI1",
partitionKey: {name: "GSI1PK", type: dynamodb.AttributeType.STRING},
sortKey: {name: "GSI1SK", type: dynamodb.AttributeType.STRING}
});
【解决方案2】:
我发现了问题,它是双重的:
-
我必须使用 RTFM - CDK 文档明确规定您可以使用作为更高级别 API 的 L2 构造,或使用 L1 CFN 构造。
-
没有代码。如果我发布了一些代码,观众会看到我使用了 CDK 的 L2 构造 Table,而我应该使用较低级别的 L1 CfnTable,它允许更大的自定义,并且确实公开了定义自己的可能性keySchema 和attributeDefinitions 根据CfnTableProps 中的指定需求。