DGo*_*erg 14 java multivalue amazon-web-services amazon-dynamodb
有没有办法在Amazon的AWS SDK for Java中使用单个查询查询多个哈希键?
这是我的问题; 我有一个项目状态的数据库表.哈希键是项目的状态(即:新建,分配,处理或完成).范围键是一组项目ID.目前,我有一个查询设置,只是简单地找到列为"已分配"状态(哈希)的所有项目,另一个查询设置为查找"处理"状态.有没有办法使用单个查询执行此操作,而不是为我需要查找的每个状态发送多个查询?代码如下:
DynamoDBMapper mapper = new DynamoDBMapper(new AmazonDynamoDBClient(credentials));
PStatus assignedStatus = new PStatus();
assignedStatus.setStatus("assigned");
PStatus processStatus = new PStatus();
processStatus.setStatus("processing");
DynamoDBQueryExpression<PStatus> queryAssigned = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(assignedStatus);
DynamoDBQueryExpression<PStatus> queryProcessing = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(processStatus);
List<PStatus> assigned = mapper.query(PStatus.class, queryAssigned);
List<PStatus> process = mapper.query(PStatus.class, queryProcessing);
Run Code Online (Sandbox Code Playgroud)
所以基本上,我想知道是否有可能消除queryAssigned和assigned变量assignedStatus并processStatus通过相同的查询处理它们process,以查找非新的或完整的项目.
不,截至今天,无法在同一请求中发送多个查询.如果您担心延迟,可以在不同的线程中同时发出多个请求.如果Dynamo提供它,则需要与"双重查询"相同的网络带宽量(假设你是2,而不是数百).
小智 9
分享我今天的空缺。
使用正常的 DynamoDB 操作,您可以每个请求仅查询一个哈希键(使用GetItem或Query操作),也可以一次查询所有哈希键(使用Scan操作)。
您可以使用该BatchGetItem操作,但它要求您指定完整的主键(如果有的话,包括范围键)。
最近,您还可以使用PartiQL(AWS 支持的一种查询语言)来查询 DynamoDB 表。使用它,您可以查询多个哈希键,例如使用IN运算符:
SELECT * FROM "table_name" WHERE "status" IN ['assigned', 'processing'];
Run Code Online (Sandbox Code Playgroud)
我在 Python 代码中使用 PartiQL,而不是 Java,因此无法提供实现细节。但它应该很容易找到,因为您知道您需要使用 PartiQL。我将在这里留下Python 的参考,以防万一。
小智 5
无法通过多个哈希键进行查询,但是,从2014年4月开始,您可以使用QueryFilter,以便除了哈希键字段之外还可以按非关键字段进行过滤.
在2014年4月24日的博客文章中,AWS宣布发布"QueryFilter"选项:
随着今天的发布,我们正在扩展此模型,支持对非键属性的查询过滤.您现在可以包含QueryFilter作为对Query函数的调用的一部分.过滤器在基于密钥的检索之后和结果返回给您之前应用.以这种方式过滤可以减少返回到应用程序的数据量,同时还可以简化和简化代码
| 归档时间: |
|
| 查看次数: |
27043 次 |
| 最近记录: |