【问题标题】:How to fetch results from multiple partitions in DynamoDb in a single QueryResultPage如何在单个 QueryResultPage 中从 DynamoDb 中的多个分区获取结果
【发布时间】:2019-05-10 23:01:48
【问题描述】:

我正在尝试查询 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")

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries


    【解决方案1】:

    这是 DynamoDB 的一个常见问题,您实际上不能对分区键使用 OR 条件,但有几种方法可以解决您的问题。

    最简单的是使用 TransactGetItemsBatchGetItems,基本上你会同时发送多个查询,事务有一个限制或每个请求 10 个和批处理 25 个。

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

    【讨论】:

    • 不确定 BatchgetItems 是否会像 dynamodbmapper 使用 LastEvaluatedKey 那样解决分页问题。
    • @creed 我认为您在混淆事情,您的客户端逻辑已经知道它需要获取的所有键,因此分页由您的代码实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2023-03-11
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多