查询 DynamoDB GSI 以查找匹配子字符串的选项有哪些?

What are the options for querying a DynamoDB GSI to find matching substrings?

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

{
  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 实现完成此操作的建议。

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

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

虽然此扫描将 return 只扫描您想要的项目,但它会评估您 table 中的每个项目,因此会花费您更多的 RCU,并且可能会随着您的 table 缩放(尽管您可以使用 ParallelScan 抵消它)。