DynamoDB:有没有办法在没有LastEvaluatedKey的情况下获取任意页面?

时间:2013-02-21 05:16:02

标签: pagination range amazon-dynamodb

我有一个带有范围键CreationDate的消息表...

如何查询任意页面?这是否可以在不必提供上一个查询返回的LastEvaluatedKey的情况下进行?这意味着客户端还必须跟踪此信息并将其与每个请求一起返回。这不允许您跳转到仲裁页面而不进行每个中间查询。

我是否必须更新另一个只包含PageKey = someTimestamp的表MessagePageKeys以实现快速页面撤销?

        QueryRequest queryReq = new QueryRequest();

        queryReq.WithTableName(tableName);
        queryReq.WithLimit(perPage);

        var startIndex = startPage * perPage;

        queryReq.WithExclusiveStartKey(new Key
        {
            HashKeyElement = new AttributeValue().WithN(hashKeyValue),
            RangeKeyElement = new AttributeValue().WithN(prevKey.ToString() )
        });

        // sort by newest (highest time signature)
        queryReq.ScanIndexForward = false;

1 个答案:

答案 0 :(得分:1)

不,如果不使用“lastEvaluatedKey”就不可能。

最后评估的密钥不一定存在,它可能对你有用,它只需要是一个有效的密钥。例如,如果在相同的哈希键下有以下范围键:

6
9
12
15

你想要一个范围键大于10的所有东西,你可以用范围键10创建一个exclusiveStartKey,然后你会回来

12
15

这与“页面边界”的更有用的定义相结合(就像我希望看到这个小时或每分钟的每个项目等)可能对您有用。我觉得数据消费者很少知道“我的结果是在第八页上,不管自从我上次查询这个表以来其他数据是如何变化的”。