更改表结构

0

【以下的问题经过翻译处理】 大家好,

我只是想确认一些事情...我们使用CloudFormation将我们的栈部署到aws,包括定义我们的DynamoDB表。由于我们还处于早期开发阶段,我没有提前研究,但我已经修改了其中一张表的哈希键的AttributeName。在我重新部署后,似乎表被删除并重新创建,因为所有旧的条目都消失了。这是发生了什么吗?不幸的是,我没有旧表的ARN,因此无法比较这两个表。

如果是这样的话,通常的做法是在现场环境中创建一个具有新键模式的二级表,以某种方式复制旧的条目,使用新键更新它们(如果需要删除旧键),然后写入新表,完成后删除旧表。如果是这样,是否有一种DynamoDB API可以执行这样的迁移?

谢谢!

profile picture
专家
已提问 9 个月前11 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

对于你的第一个问题,是的,你的CloudFormation删除了旧表并创建了新表。这里有一篇很好的文章,它解释了发生了什么,以及一些防止此类情况再次发生的策略,包括如何利用堆栈策略和如何利用UpdateReplacePolicy。

https://www.alexdebrie.com/posts/understanding-cloudformation-updates/

同时,这是一篇我在网上发现的关于如何改变你的键结构的好文章,作者是Abhaya Ahauhan。注意:他还包括了一个链接,用于执行这些操作的代码。

https://www.abhayachauhan.com/2018/01/dynamodb-changing-table-schema/

1.创建一个新表(我们称之为NewTable),具有所需的键结构,LSI,GSI。
2.在原始表中启用DynamoDB Streams。
3.将Lambda与流相关联,将记录推入NewTable。 (该Lambda应修剪步骤5中的迁移标志)
4. [*可选*]在原始表上创建GSI以加速扫描项目。确保该GSI只有以下属性:主键和Migrated(参见步骤5)。
5.扫描先前步骤中创建的GSI(或整个表),并使用以下过滤器:
FilterExpression =“attribute_not_exists(Migrated)”
使用“Migrated”:{“S”:“0”}的迁移标志更新表中的每个项目,将其发送到DynamoDB Streams(使用UpdateItem API,以确保不存在数据丢失)。

**注意**您可能需要在更新期间增加表的写入容量单位。

6. Lambda将获取所有项目,修剪掉Migrated标志,并将其推入NewTable。
7.完成所有迁移后,重新将代码指向新表。
8.删除原始表和Lambda函数,一旦确认一切都正常。
希望这有所帮助!
Randy
profile picture
专家
已回答 9 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则