目錄
文章目錄
- 目錄
- 資料庫遷移與版本控制
- DB Migration 的本質是 DDL
- 為什么需要 DB Migration?
- 常見的 DB Migration
- Alembic
- gormigrate
資料庫遷移與版本控制
所謂資料庫遷移(Migration)就是資料庫表結構的演變,更多的是一種 “演進”,而資料庫版本控制(Version Control)則包含更多,包括:Version Track(版本跟蹤)、Upgrade(升級)、Downgrade(降級)、BACKUP(備份)、原子性操作等,從術語上,我們通常使用 Migration 來概括界限模糊的兩者,本質是一種 “內容版本控制系統”,就像 Git 一般,
資料庫遷移的方式大體上有兩種:
- 基于原生 SQL 的遷移,
- 基于 ORM Schema 的遷移,
前者因為和上層應用邏輯耦合度較低,從 DBA 的視角出發,所以可以直接基于 SQL 陳述句來完成,主要關注的是資料記錄安全備份、恢復、跨平臺兼容等場景;而后者主要服務于生產級應用程式,從 Developer 的角度出發,是隨著應用程式版本迭代而進行的 ORM Schema 更新,
如果你在應用開發的程序中,需要頻繁地通告開發團隊成員切記手動維護本地資料庫表結構,繼而維護開發環境,尤其在分布式協作團隊當中(例如:開源社區),那么這正是 ORM Schema Version Control 所致力于解決的問題 —— 提供實時的資料庫版本升級,
DB Migration 的本質是 DDL
DDL(資料定義語言)用于創建資料庫中的各種物件,例如:表、視圖、索引、同義詞、聚簇等,對應的指令為:CREATE TABLE、VIEW、INDEX、SYN、CLUSTER 等,
需要注意的是,DDL 操作在 RDBMS 層面是隱性提交的,不能 Rollback,但資料庫應用程式可以顯示的執行 “洗掉/還原” 實作 Rollback 的效果,
為什么需要 DB Migration?
資料庫應用軟體的版本迭代程序中難免需要修改 ORM 的資料模型(Data Model)即 DLL,例如:添加一個表、添加一個欄位、修改一個欄位的屬性等,
然而在生產環境中,這些 DDL 操作不可以影響到現存的生成資料記錄,這里就會出現一個需求:怎樣在保證原有生產資料完整性的情況下對資料庫進行升級,或回滾到之前的某一個時刻以復現環境,這就是需要 DB Migration 的核心述求,
參見《Openstack_SQLAlchemy 修改資料庫的表結構》一文,
常見的 DB Migration
Alembic
在 Python 生態中,SQLAlchemy 是一款非常優秀的 ORM 框架,但其本身沒有提供資料庫版本控制功能,所以 SQLAlchemy 的開發者就再開發了 Alembic 這一款 Database Migration(資料遷移跟蹤記錄)軟體來彌補這一缺失,
參見《用 Flask 來寫個輕博客 (8) — (M)VC_Alembic 管理資料庫結構的升級和降級》一文,
gormigrate
在 Golang 生態中,GORM 同樣是一款優秀的 ORM 框架,并且自身提供了一定程度的遷移功能,包括:AutoMigrate 和 Mirgator DDL 操作方法兩個層面,gormigrate 就是基于以上兩種能力進行封裝的版本控制工具,也稱為:GORM 遷移助手,
參見《Go 語言編程 — gormigrate GORM 的資料庫遷移助手》一文,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/167575.html
標籤:其他
