3

我有一个带有范围键 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;
4

1 回答 1

1

不,不使用“lastEvaluatedKey”是不可能的。

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

6
9
12
15

而且你想要范围键大于 10 的所有内容,你可以创建一个具有范围键的 ExclusiveStartKey 10,你会得到

12
15

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

于 2013-03-04T03:40:49.837 回答