如何在单个QueryResultPage中从DynamoDb的多个分区中获取结果

时间:2019-05-09 21:28:50

标签: amazon-dynamodb dynamodb-queries

我正在尝试查询dynamodb,其中我的实际数据分为3部分(基于散列函数)。我想从所有分区中获取匹配主键的结果,然后对它们进行分页。我不确定是否可以。

我知道如何从单个分区中获取记录。我使用下面的代码执行此操作,即使这些分区可能具有相同的键,它也只能从该分区中检索数据,而不能从其他分区中检索数据

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
        eav.put(":partitionKey", new AttributeValue().withS(hashKey));
DynamoDBQueryExpression<MyClazz> queryExpression = new DynamoDBQueryExpression<MyClazz>()
                .withKeyConditionExpression("partitionKey = :partitionKey")
                .withExpressionAttributeValues(eav)
                .withLimit(limit)
                .withExclusiveStartKey(lastEvaluatedKey);

但这将从第一个分区获取数据。我想从单个QueryResultPage中的其他剩余分区中获取数据,以便可以对它们进行分页。

有可能这样做吗?

我的意思是下面的条件一起执行,以便得到一个QueryResultPage

("key = :partition1 or key = :partition2 or key = :partition3")

1 个答案:

答案 0 :(得分:0)

这是DynamoDB的常见问题,实际上分区键上没有OR条件,但是有两种方法可以解决问题。

最简单的方法是使用 TransactGetItems BatchGetItems ,基本上,您会向gheter发送多个查询,每个请求的交易数量限制为10个,每批次25个。

我不确定您使用的是哪个SDK,但可能已映射了这些功能。