amazon-dynamodb - 查询 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 实现来完成此操作的建议。
解决方案
当您在 dynamodb 中执行查询时,您提供了一个准确(完整)的哈希键。
如果要在哈希键上匹配子字符串,则不能使用查询。相反,您需要执行包含 FilterExpression的扫描。
虽然此扫描将只返回您想要的项目,但它会评估表中的每个项目,因此会花费您更多的 RCU,并且可能会随着表的扩展而减慢(尽管您可以使用 ParallelScan 来抵消这一点)。
推荐阅读
- python - Pandas CategoricalDtype 在尝试使用 openpyxl 写入 Excel 文件时导致 IndexError
- c# - 是否可以通过 EF Core 5 在 SQL Server 聚集索引上指定填充因子?
- unity3d - Dotween blendablecolor 命令丢失问题
- android - 包含 .aar 文件后,cordova 上的应用程序崩溃
- sql - 将一列拆分为三列——新场景
- bitbucket - Bitbucket 管道步骤依赖项
- swift - 将绑定变量传递给swiftui中的类的函数
- python - 无法在虚拟环境中使用 Python
- cypress - 如何断言之前选择的值显示在结果摘要页面中?
- php - AJAX 从数据库中删除项目