【问题标题】:DynamoDB scan leaves valid item outDynamoDB 扫描会遗漏有效项目
【发布时间】:2018-04-06 04:16:57
【问题描述】:

在 DynamoDB 表中,我有一个具有以下方案的项目:

{
    id: 427,
    type: 'page',
    ...other_data
}

在查询主索引 (id) 时,我得到了按预期返回的项目。

在 AWS DynamoDB Web 应用程序中使用 scan 操作来获取所有类型为 page 的项目,包括此缺失项目在内的 188 个项目将被返回。但是,使用 AWS 开发工具包在 Lambda 内部执行此扫描操作,仅返回 162 个项目。部分代码如下:

const params = { 
    TableName: <my-table-name>,
    FilterExpression: '#type = :type',
    ExpressionAttributeNames: { '#type': 'type' },
    ExpressionAttributeValues: { ':type': 'page' }
};

dynamodb.scan(params, (error, result) => {
    if (error) {
      console.log('error', error);
    } else {
      console.log(result.Items); // 162 items
    }
});

这里缺少什么?

【问题讨论】:

  • 您是否尝试过将 ConsistentRead 设置为 true?如果您已尝试多次但只是为了丢弃您因为读取默认最终一致性而丢失了记录,这无关紧要
  • @Daniel 不幸的是,这并没有解决它。但是,我刚刚发现实现stackoverflow.com/a/44590524/5550032(已接受的答案)对我有用。显然我达到了某种极限。或许从 type 属性创建 GSI 会更好。

标签: node.js amazon-web-services amazon-dynamodb aws-lambda


【解决方案1】:

这可能是您的结果数据集超过限制 1MB 的情况:

如果扫描的项目总数超过最大数据集大小 限制为 1 MB,扫描停止并将结果返回给用户 一个 LastEvaluatedKey 值,用于在后续的扫描中继续 手术。结果还包括超过 限制。扫描可能导致没有符合过滤条件的表数据。

检查LastEvaluatedKey 字段的结果并将其用于下一次扫描操作,将其作为ExclusiveStartKey 传递

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多