我有一个
Workouts
表和一个索引 ByPlanIdIsCompletedAndCreatedBy
。
索引包含
planId
的分区键和具有组合字段 isComplete#createdBy
的排序键。
我为 DynamoDB 查询操作编写了以下参数,尝试检查锻炼中是否至少有一个项目符合以下
KeyConditionExpression
,目标是最大限度地减少读取消耗但绝不分页到下一页。
{
TableName: 'Workouts',
IndexName: 'ByPlanIdIsCompletedAndCreatedBy',
KeyConditionExpression: 'planId = :planId begins_with(isComplete#createdBy, :sortKey)',
ExpressionAttributeValues: {
':planId': '<some-id>',
':sortKey': 'TRUE#BBBB',
},
Limit: 1
};
假设表中有一个满足
KeyConditionExpression
要求的项目,是否会出现这样的情况:我从查询中得到空结果,但得到了LastEvaluatedKey
?如果是这样,为什么?我需要采取什么措施来避免分页,或者极大地减少需要分页的机会?
简单的答案是,如果存在的话,您总是会得到一件物品。在极其罕见的边缘情况下,即使存在,也可能会出现您无法获得物品的情况,但这种情况极为罕见。
但是,Limit=1 将始终返回 LEK。
我会忽略边缘情况,因为它可能不会是您见过的情况,但如果您担心,请将您的限制更改为 2。如果 2 个项目落入 4KB 之内,则无需额外费用即可读取额外的项目。