Amazon web services 当页面之间的日期发生变化时,分页的DynamoDB查询的行为如何?

Amazon web services 当页面之间的日期发生变化时,分页的DynamoDB查询的行为如何?,amazon-web-services,pagination,amazon-dynamodb,Amazon Web Services,Pagination,Amazon Dynamodb,我正在使用DynamoDBMapper对DynamoDB进行分页查询。该查询基于某个本地二级索引(索引字段),如果某个条目被标记为已删除并带有时间戳,则该索引将组合信息。假设我有以下数据: {..., creationTime: 1000, isDeleted: false, index=F:1000} {..., creationTime: 1001, isDeleted: false, index=F:1001} {..., creationTime: 1002, isDeleted: fa

我正在使用DynamoDBMapper对DynamoDB进行分页查询。该查询基于某个本地二级索引(
索引
字段),如果某个条目被标记为已删除并带有时间戳,则该索引将组合信息。假设我有以下数据:

{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1002}
{..., creationTime: 1003, isDeleted: false, index=F:1003}
现在,我在结果的第一页进行查询并得到两个条目:

{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1002}
{..., creationTime: 1003, isDeleted: false, index=F:1003}
我查询第二页,应该得到剩下的两个条目:

{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1002}
{..., creationTime: 1003, isDeleted: false, index=F:1003}
但是如果在页面之间第三个条目被标记为已删除呢

{..., creationTime: 1002, isDeleted: true, index=D:1002} << changed !

{…,creationTime:1002,isDeleted:true,index=D:1002}dynamodb按范围键对结果排序。
在本例中,范围键(索引)是字符串,因此顺序将根据其字符串值确定

请求页面时,需要提供最后一个经过计算的键(最后一个范围键然后从上一页返回)

通过这个“最后评估的键”,dynamodb知道返回哪个页面

让我们以你为例

您的范围键的格式为“F/D:”

“F”的字符串值始终大于“D”

因此,如果任何“F”记录将更改为“D”,那么它将永远不会在下一页返回(如果您到达的页面的索引以“F”开头)(除非更改顺序(ASC/DESC),但这不是您的情况)

所以我们假设索引如下所示:

{..., creationTime: 1000, isDeleted: false, index=D:1000}
{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1002}
{..., creationTime: 1002, isDeleted: false, index=F:1003}
{..., creationTime: 1000, isDeleted: false, index=D:1000}
{..., creationTime: 1002, isDeleted: true, index=D:1002}
{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1003}
如果您的第一页是:

{..., creationTime: 1000, isDeleted: false, index=D:1000}
{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}

更改为“已删除”,则您的下一页将是:

{..., creationTime: 1002, isDeleted: false, index=F:1003}
因为现在你的索引是这样的:

{..., creationTime: 1000, isDeleted: false, index=D:1000}
{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1002}
{..., creationTime: 1002, isDeleted: false, index=F:1003}
{..., creationTime: 1000, isDeleted: false, index=D:1000}
{..., creationTime: 1002, isDeleted: true, index=D:1002}
{..., creationTime: 1000, isDeleted: false, index=F:1000}
{..., creationTime: 1001, isDeleted: false, index=F:1001}
{..., creationTime: 1002, isDeleted: false, index=F:1003}

这取决于你的指数。你能描述一下你的本地二级索引吗?已编辑<代码>索引
字段用作范围键