【问题标题】:DynamoDB table migration - Advice on keeping data in sync?DynamoDB 表迁移 - 关于保持数据同步的建议?
【发布时间】:2019-07-28 10:36:16
【问题描述】:

我的团队正在将几个不同的 DynamoDB 表迁移到一组两个 DynamoDB 表中。本质上,我们正在更改模型并将大量数据合并到两个表中(现在它分布在 6 个表中)。

我们正在考虑使用 DynamoDB 流并让这些流触发一个 Lambda,该 Lambda 处理触发一些写入新表的 API 的逻辑。但是,我也在尝试弄清楚如何处理 old 数据,因为我们还必须将表中已有的所有内容迁移到新表中。

我猜一个选项是运行一些东西来扫描 DynamoDB 表中的每个项目(有些项目大约有 1 亿个),并且对于每个项目,调用 Lambda 调用的相同 API 以编写新表到。但是,我不确定当我们在迁移过程中也经常将新记录写入旧表时,旧表的扫描是如何处理的。

是否有人对进行此类迁移并保持同步有一些建议?

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    Streams 和 lambda 是一个很好的 solution (by Abhaya Chauhan)...
    (也是复数形式的video

    在这种情况下,请尝试利用 DynamoDB Streams 和 AWS Lambda 根据需要对数据进行重构。

    重组表定义的一个好方法是利用 DynamoDB 触发器,遵循以下步骤:

    1. 使用所需的键结构、LSI、GSI 创建一个新表(我们称之为 NewTable)。

    2. 在原始表上启用 DynamoDB 流

    3. 将 Lambda 关联到 Stream,它将记录推送到 NewTable。 (这个 Lambda 应该在第 5 步中去掉迁移标志)
    4. [可选] 在原始表上创建 GSI 以加快扫描项目的速度。确保此 GSI 仅具有以下属性:主键和已迁移(请参阅第 5 步)。
    5. 扫描在上一步中创建的 GSI(或整个表)并使用以下过滤器: FilterExpression = "attribute_not_exists(已迁移)" 使用迁移标志更新表中的每个项目(即:“Migrated”:{“S”:“0”},它将其发送到 DynamoDB Streams(使用 UpdateItem API,以确保不会发生数据丢失)。

    注意您可能希望在更新期间增加表上的写入容量单位。

    1. Lambda 将拾取所有项目,修剪 Migrated 标志并将其推入 NewTable。
    2. 迁移所有项目后,将代码重新指向新表
    3. 去掉原来的表,Lambda函数一旦开心就好了。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2010-10-17
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2012-11-26
      相关资源
      最近更新 更多