我可以在我的 DynamoDB table 上列出所有包含这些值的项目吗?
Can I List all items that contain these values on my DynamoDB table?
我有一个 DynamoDB table 包含具有以下结构的项目:
{
"applicationName": { //PARTITION KEY
"S": "FOO_APP"
},
"requestId": { // SORT KEY
"S": "zzz/yyy/xxx/58C28B6"
},
"creationTime": {
"N": "1636332219136"
},
"requestStatus": {
"S": "DENIED"
},
"resolver": {
"S": "SOMEONE"
}
}
在 DynamoDB 中,我可以查询此 table 以 列出 与 applicationName
、requestStatus
提供的值相匹配的所有项目,并且, resolver
?
换句话说,我如何列出所有匹配项:
- 应用程序名称 = 'FOO',
- requestStatus = 'DENIED',以及
- 解析器 = 'SOMEONE'
有了这个 table 设计,我需要 GSI 吗?我可以进行查询还是扫描?
完成这项任务最具成本效益、最有效的方法是什么?
我正在使用 Java 的 DynamoDBMapper。
您可能无法查询此模式作为您的排序键 - requestId 不在条件中。这意味着,您的查询将失败。为了更好的模式设计,您应该有一个排序键,这样可以帮助您缩小仅通过查询 PartitionKey 获得的结果集。
因此,对于解决方案,您必须按如下方式创建新索引:
applicationName -> Partition Key
requestStatus -> Sort Key
resolver
然后您可以使用 applicationName 上的 keyConditionExpression 和 requestStatus 上的 resolver 上的 filterExpression 进行查询。
您可以添加另一个属性来组合您要查询的值,如下所示:
GSI1PK: <applicationName>#<requestStatus>#<resolver>
然后定义一个全局二级索引 (GSI1
),分区键为 GSI1PK
,排序键类似于当前排序键 requestId
。
每当你想找到符合这三个条件的所有请求时,你构建你的搜索事物并查询全局二级索引:
Query @GSI1
Partition Key = FOO_APP#DENIED#SOMEONE
这将生成所有符合条件组合的请求。这种反规范化在 DynamoDB 等 NoSQL 数据库中很常见。
我有一个 DynamoDB table 包含具有以下结构的项目:
{
"applicationName": { //PARTITION KEY
"S": "FOO_APP"
},
"requestId": { // SORT KEY
"S": "zzz/yyy/xxx/58C28B6"
},
"creationTime": {
"N": "1636332219136"
},
"requestStatus": {
"S": "DENIED"
},
"resolver": {
"S": "SOMEONE"
}
}
在 DynamoDB 中,我可以查询此 table 以 列出 与 applicationName
、requestStatus
提供的值相匹配的所有项目,并且, resolver
?
换句话说,我如何列出所有匹配项:
- 应用程序名称 = 'FOO',
- requestStatus = 'DENIED',以及
- 解析器 = 'SOMEONE'
有了这个 table 设计,我需要 GSI 吗?我可以进行查询还是扫描?
完成这项任务最具成本效益、最有效的方法是什么?
我正在使用 Java 的 DynamoDBMapper。
您可能无法查询此模式作为您的排序键 - requestId 不在条件中。这意味着,您的查询将失败。为了更好的模式设计,您应该有一个排序键,这样可以帮助您缩小仅通过查询 PartitionKey 获得的结果集。
因此,对于解决方案,您必须按如下方式创建新索引:
applicationName -> Partition Key
requestStatus -> Sort Key
resolver
然后您可以使用 applicationName 上的 keyConditionExpression 和 requestStatus 上的 resolver 上的 filterExpression 进行查询。
您可以添加另一个属性来组合您要查询的值,如下所示:
GSI1PK: <applicationName>#<requestStatus>#<resolver>
然后定义一个全局二级索引 (GSI1
),分区键为 GSI1PK
,排序键类似于当前排序键 requestId
。
每当你想找到符合这三个条件的所有请求时,你构建你的搜索事物并查询全局二级索引:
Query @GSI1
Partition Key = FOO_APP#DENIED#SOMEONE
这将生成所有符合条件组合的请求。这种反规范化在 DynamoDB 等 NoSQL 数据库中很常见。