【问题标题】:How to update millions of dynamodb records in an efficient way如何以有效的方式更新数百万条 dynamodb 记录
【发布时间】:2022-01-05 11:18:13
【问题描述】:

我正在尝试更新具有数百万行的 dynamodb 表。尝试使用 lambda 函数对其进行更新,但最终在 15 分钟后超时。我想以一种有效的方式更新表中存在的所有记录的单个属性值。有人可以建议如何实现这一目标吗?

【问题讨论】:

    标签: python-3.x dynamodb-queries amazon-dynamodb


    【解决方案1】:

    这只是我的 5 美分,它可能不是官方的、完美的,甚至不是很好的做事方式。但是我们开始了:

    • 创建 SQS 队列
    • 让 lambda 监听该队列中的消息
    • 运行 lambda,让它从数据库中读取第一个项目块。
    • 从获得 LastEvaluatedKey 的查询中,将其存储在单独的 dynamodb 项/表中
    • 将 LastEvaluatedKey 放入队列
    • 再次调用 Lambda 时,使用从队列中传入的 LastEvaluatedKey 并将其传递给查询中的 ExclusiveStartKey,以便您的查询返回 DynamoDB 中您尚未处理的下一个项目

    此设置意味着您的 lambda 一次只能处理小块。这也意味着当出现问题时,您的项目会存储在 DynamoDB 中并存储 LastEvaluatedKey,这样您就可以从上次中断的地方继续。

    希望这是有用的,祝你好运:)

    【讨论】:

    • 我想知道避免 SQS 队列并简单地从 DynamoDB 流中调用 lambda 作为写入 LastEvaluatedKey 的结果是否更有效。这样,当您将状态保存在第二个表中时,动作也会调用下一次迭代。该过程可以以最后一个 lambda 终止,要么不更新表,要么(可以说更简洁,因为它简化了知道事情何时真正完成)将标记值写入表以指示完成,lambda 在启动时查找以快捷方式退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多