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