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

时间:2019-03-06 17:07:25

标签: amazon-web-services amazon-dynamodb

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

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

我猜一个选择是运行某种程序,该程序扫描DynamoDB表中的每个项目(其中一些大约有1亿个),并为每个函数调用Lambda调用的相同API以写入新表至。但是,我不确定在迁移过程中定期将新记录定期写入旧表时,旧表的扫描如何处理。

在进行这样的迁移并使事情保持同步方面,有人对吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

Streams和Lambda都是不错的solution (by Abhaya Chauhan) ......
(也是video的复数形式)

  

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

     

重组表定义的一种好方法是按照以下步骤利用DynamoDB触发器:

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

  2.   
  3. 在原始表上启用DynamoDB流

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

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

     
      
  1. Lambda将提取所有项目,修剪Migrated标志并将其推入NewTable。
  2.   
  3. 所有项目迁移完毕后,将代码重新指向新表
  4.   
  5. 删除原始表,Lambda函数一旦幸福就好。
  6.