有没有办法在DynamoDB中查询多个哈希键?

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)

所以基本上,我想知道是否有可能消除queryAssignedassigned变量assignedStatusprocessStatus通过相同的查询处理它们process,以查找非新的或完整的项目.

Cor*_*all 9

不,截至今天,无法在同一请求中发送多个查询.如果您担心延迟,可以在不同的线程中同时发出多个请求.如果Dynamo提供它,则需要与"双重查询"相同的网络带宽量(假设你是2,而不是数百).


小智 9

分享我今天的空缺。

获取项目、查询、扫描

使用正常的 DynamoDB 操作,您可以每个请求仅查询一个哈希键(使用GetItemQuery操作),也可以一次查询所有哈希键(使用Scan操作)。

批量获取项目

您可以使用该BatchGetItem操作,但它要求您指定完整的主键(如果有的话,包括范围键)。

部分QL

最近,您还可以使用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函数的调用的一部分.过滤器在基于密钥的检索之后和​​结果返回给您之前应用.以这种方式过滤可以减少返回到应用程序的数据量,同时还可以简化和简化代码

检查一下 http://aws.amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+AmazonWebServicesBlog+%28Amazon+Web+Services+Blog% 29