关于 GORM 控制 AutoMigrate 节省启动时间
什么是 AutoMigrate?
在 Go 开发中,我们经常需要修改数据库表结构。传统方式是手动编写 SQL 语句,既繁琐又容易出错。GORM 的 AutoMigrate 功能应运而生,它能自动同步代码和数据库结构,让开发更高效。
为什么需要控制 AutoMigrate?
让我们看看一个真实场景:项目初期只有 7 个表,AutoMigrate 执行只需 1 秒。随着功能增加,表数量增长到 30 个,启动时间延长到 10 秒。更糟的是,即使表结构没有变化,每次启动都要重新检查所有表,这显然不合理。
解决方案:版本控制
goddd 引入版本控制机制,就像软件更新一样,只有在新版本发布时才需要更新。具体实现:
- 数据库记录当前版本号
- 程序启动时检查代码版本号
- 仅当代码版本号大于数据库版本号时执行 AutoMigrate
如何修改版本?代码示例
// 设置数据库版本号(0.0.2 或 v0.0.2 都可以)
versionapi.DBVersion = "0.0.2"
// 添加版本说明,记录这次更新了什么
versionapi.DBRemark = "添加了用户头像字段"
通过 orm.EnabledAutoMigrate
可以全局控制 AutoMigrate 的启用状态。
这样做有什么好处?
- 程序启动更快了,不用每次都检查所有表
- 避免不必要的数据库操作,减少数据库压力
- 可以清楚地知道每次数据库结构变更的历史
关于 goddd
github.com/ixugo/goddd 是一个基于领域驱动设计(DDD)的 Go 语言项目模板,提供了完整的项目结构和最佳实践。它集成了 GORM、Gin 等常用组件,特别适合中小项目快速开始。
想了解更多?欢迎查看 goddd 的源码。