【问题标题】:What are the options for querying a DynamoDB GSI to find matching substrings?查询 DynamoDB GSI 以查找匹配子字符串的选项有哪些?
【发布时间】:2021-09-22 04:20:50
【问题描述】:

我有一个 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 很陌生,所以我不确定实现这一目标的最佳方法。

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

当前请求 VTL 模板:

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

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

【问题讨论】:

    标签: amazon-dynamodb vtl


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2023-01-06
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多