DynamoDB 表迁移 - 关于保持数据同步的建议?

Cus*_*Bun 2 amazon-web-services amazon-dynamodb

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

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

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

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

谢谢!

Cha*_*les 5

Streams 和 lambda 是一个很好的解决方案(作者 Abhaya Chauhan) ...
\n(也是pluralsight 上的视频

\n\n
\n

在这种情况下,请尝试利用 DynamoDB Streams 和 AWS Lambda 根据需要重新建模数据。

\n\n

重构表定义的一个好方法是利用 DynamoDB 触发器,按照以下步骤操作:

\n\n
    \n
  1. 创建一个新表(我们称之为 NewTable),其中包含所需的键结构、LSI、GSI。

  2. \n
  3. 在原始表上启用 DynamoDB Streams

  4. \n
  5. 将 Lambda 关联到 Stream,将记录推送到 NewTable 中。(此 Lambda 应在步骤 5 中删除迁移标志)
  6. \n
  7. [选修的]在原始表上创建GSI以加快扫描项目的速度。确保此 GSI 仅具有属性:主键和已迁移(请参阅步骤 5)。
  8. \n
  9. 扫描在上一步中创建的 GSI(或整个表)并使用以下过滤器:\n FilterExpression = "attribute_not_exists(Migerated)"\n 使用迁移标志更新表中的每个项目(即:\xe2\x80\x9cMigerated \xe2\x80\x9d: { \xe2\x80\x9cS\xe2\x80\x9d: \xe2\x80\x9c0\xe2\x80\x9d },将其发送到 DynamoDB Streams(使用 UpdateItem API,以确保不会发生数据丢失)。
  10. \n
\n\n

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

\n\n
    \n
  1. Lambda 将拾取所有项目,删除 Migerated 标志并将其推送到 NewTable 中。
  2. \n
  3. 迁移所有项目后,将代码重新指向新表
  4. \n
  5. 删除原始表,Lambda 函数一旦满意就一切顺利。
  6. \n
\n
\n