首页 > 解决方案 > 查询 DynamoDB GSI 以查找匹配子字符串的选项有哪些?

问题描述

我有一个 dynamodb 表,其结构类似于:

{
  Type: 'AWS::DynamoDB::Table',
  Properties: {
    KeySchema: [
      {
        AttributeName: 'itemID',
        KeyType: 'HASH'
      }
    ],

    AttributeDefinitions: [
      {
        AttributeName: 'itemID',
        AttributeType: 'S'
      },
      {
        AttributeName: 'label',
        AttributeType: 'S'
      }
    ],

    GlobalSecondaryIndexes: [
      {
        IndexName: 'byLabel',
        KeySchema: [
          {
            AttributeName: 'label',
            KeyType: 'HASH'
          }
        ],
        Projection: {
          ProjectionType: 'ALL'
        }
      }
    ]
  }
}

对于我的一种访问模式,我想获取包含带有特定子字符串的标签的所有数据。我对 dynamodb 很陌生,所以我不确定实现这一目标的最佳方法。

我让它像下面这样工作。但是我更喜欢更多结果,因此返回包含输入的数据将是理想的。

当前请求 VTL 模板:

{
    "version": "2018-05-29",
    "operation": "Query",
    "query": {
        "expression": "label = :label",
        "expressionValues": {
            ":label": $util.dynamodb.toDynamoDBJson($context.arguments.label)
        }
    },
    "index": "byLabel",
}

我正在寻找有关通常如何使用 dynamodb 实现来完成此操作的建议。

标签: amazon-dynamodbvtl

解决方案


当您在 dynamodb 中执行查询时,您提供了一个准确(完整)的哈希键。

如果要在哈希键上匹配子字符串,则不能使用查询。相反,您需要执行包含 FilterExpression的扫描。

虽然此扫描将只返回您想要的项目,但它会评估表中的每个项目,因此会花费您更多的 RCU,并且可能会随着表的扩展而减慢(尽管您可以使用 ParallelScan 来抵消这一点)。


推荐阅读