更改大型dynamodb表以使用LSI而不是GSI

时间:2016-09-09 12:20:15

标签: amazon-dynamodb

我在发电机上有一张活动表,里面有大约2800万条记录 该表有一些GSI,我想将其更改为LSI,但LSI只能在创建表时创建。

我需要创建一个新表并以最少的停机时间迁移数据。我在想我会做以下事情: 使用正确的索引创建新表。 更新代码以将记录写入旧表和新表。启动时,请记下第一条记录的时间戳。 编写一个简单的流程来同步现有数据,以便在我的第一个日期之前创建日期 我必须在新表中添加一个锁定字段,以防止更新现有记录时的竞争条件。 当它全部同步时,我们将交换使用新表。

我认为这样可行,但它相当复杂并且容易出错。有没有人找到更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

这是一种方法:

(让我们将带有GSI的表称为oldTable,将带有LSI的新表称为newTable)。

  1. 使用所需的LSI创建newTable。
  2. 为oldTable创建一个DynamoDB tirgger,以便每个到oldTable的新记录都将相同的记录插入到newTable中。 (此逻辑需要在AWS Lambda中)。
  3. 让您的应用程序指向newTable。
  4. 将所有记录从oldTable迁移到newTable。