我有一个包含范围键CreationDate的Message表。。。
如何查询任意页面?这是否可以在不提供上一个查询返回的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;
不,不使用"lastEvaluatedKey"是不可能的。
最后一个评估的键不一定存在,它只需要是一个有效的键,这可能对您有用。例如,如果您在同一哈希密钥下有以下范围密钥:
6
9
12
15
如果你想要范围密钥大于10的所有东西,你可以创建一个范围密钥为10
的独占StartKey,然后你就会得到
12
15
这与更有用的"页面边界"定义相结合(比如我想查看这一小时或这一分钟的每一项,等等)可能对你有用。我觉得很少有数据消费者会知道"我的结果在第八页,不管自我上次查询该表以来其他数据发生了什么变化"。