Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何通过CDK向DynamoDb添加第三个可索引属性?_Amazon Web Services_Database Design_Amazon Dynamodb_Aws Cdk - Fatal编程技术网

Amazon web services 如何通过CDK向DynamoDb添加第三个可索引属性?

Amazon web services 如何通过CDK向DynamoDb添加第三个可索引属性?,amazon-web-services,database-design,amazon-dynamodb,aws-cdk,Amazon Web Services,Database Design,Amazon Dynamodb,Aws Cdk,我试图遵循一个教程,该教程通过一种叫做索引重载的方法来解释DynamoDB的正确用法。本教程是。我正在通过CDK创建DynamoDB 问题是: 本教程提到索引将包括:分区键、排序键和第三个名为“数据”的字段,该字段本身将用作排序键: 创建一个具有三个通用属性的DynamoDB表:“分区键”、“排序键”和“数据” 三个通用属性将用于支持两个索引:主表索引使用pk作为分区,sk作为排序键,全局二级索引使用sk作为分区,数据作为排序 如上所示,此逻辑涉及3个属性的存在。但是AWS CDK允许添加分区键

我试图遵循一个教程,该教程通过一种叫做索引重载的方法来解释DynamoDB的正确用法。本教程是。我正在通过CDK创建DynamoDB

问题是: 本教程提到索引将包括:分区键、排序键和第三个名为“数据”的字段,该字段本身将用作排序键:

创建一个具有三个通用属性的DynamoDB表:“分区键”、“排序键”和“数据”

三个通用属性将用于支持两个索引:主表索引使用pk作为分区,sk作为排序键,全局二级索引使用sk作为分区,数据作为排序


如上所示,此逻辑涉及3个属性的存在。但是AWS CDK允许添加分区键和排序键——初始模式描述中不能包含其他属性。在没有“数据”属性的情况下,如何创建如上所述的包含“数据”属性的索引?

使用CDK创建DynamoDB表时,有一些可以帮助您定义辅助索引

例如,下面是一段CDK(javascript)代码,它创建了一个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}
    });

我发现问题有两个方面:

  • 我必须RTFM——CDK文档明确规定,您可以使用作为更高级API的L2构造,也可以使用L1 CFN构造

  • 没有密码。如果我发布了一些代码,观众会看到我使用了CDK的L2结构
    ,而我本应该使用较低级别的L1
    CfnTable
    ,它允许更大的定制,并且可以根据
    CfnTableProps
    中的指定需要定义自己的
    keySchema
    attributeDefinitions