在Woovi,我们的移动非常快,我们的数据建模需要随着需求的变化而发展。
为此,我们需要在生产中运行数据迁移,而停机时间为零,以避免影响我们的用户。
什么是迁移?
迁移是当您从一种类型的代码/数据转移到另一种代码/数据时。
之所
如果您不运行数据库迁移,您的新代码无法正常工作,并且将来无法删除您的旧代码。
数据库迁移是将一些旧数据模式更新为新模式的代码。
- 它可以在数据库中添加一个新字段。
- 它可以从数据库中删除旧字段。
- 它可以在新数据中转换一些旧数据。
它是从旧数据到所需的新数据的“地图”。
迁移原则
我们需要确保我们的迁移遵循一些原则以避免生产事件。
愿意
迁移需要基于势力。
IDEMTOTENT是一个函数,无论您运行多少次功能,它始终都具有相同的最终结果。迁移可能会在执行的中间破裂,因此可以安全地重新运行它们。
继续执行
迁移应从停止的位置继续,并应完成。处理时要迁移的项目数应减少。
我们想将字段发送者添加到事务模型中。要修复过去,我们需要旧交易项目的迁移。我们在没有发件人字段的情况下搜索所有交易,因此我们可以避免迁移不需要迁移的项目
const cursor = Transaction.find({
sender: {
$exits: false,
},
});
数据库光标
我们收藏中的物品数量每天都在越来越大。因此,我们无法将所有项目带入内存中。我们需要使用光标在批处理中处理它们。
测试
每个迁移都需要测试以覆盖边缘案例。我们不能让数据库处于不一致的状态。
tick tock和向后兼容
我们的代码需要与旧数据模型一起使用,直到完成迁移为止,这确保部署和迁移被解耦。
您可以了解有关此主题的更多信息:https://dev.to/woovi/tick-tock-migration-pattern-2gn和https://dev.to/woovi/practical-backward-compatibility-example-2c9n
生产迁移
我们有一个docker映像,仅在分期和生产中运行迁移,这确保我们在正确的环境中运行迁移。
在生产中运行迁移的过程遵循以下内容:
- 制作新版本
- 在本地运行迁移
- 验证结果
- 在登台时运行迁移
- 验证结果
- 做备份
- 在生产时运行迁移
- 验证结果
由于上述原则,我们可以在任何部署之前或之后运行迁移。
综上所述
在进行新部署之前运行迁移并不安全。
遵循本文的原则,您可以将您的部署与迁移过程中的部署相结合。
您可以在没有匆忙的情况下安全地运行迁移,因此您无需阻止部署。
重新思考现有过程是Woovi为确保我们可以快速移动而不会破坏事情而做的一件事。
woi
Woovi是一家创业公司,使购物者能够按照自己的意愿付款。为了实现这一目标,Woovi为商人提供即时付款解决方案接受订单。
如果您想与我们合作,我们是hiring!