欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关系型数据的迁移与版本控制

程序员文章站 2024-01-24 13:01:40
目录文章目录目录什么是 DDL?为什么需要 DDL 版本控制?常见的 DDL 版本控制软件AlembicGORM什么是 DDL?DDL(数据定义语言):用来创建数据库中的各种对象,例如:表、视图、索引、同义词、聚簇等,对应的指令为:CREATE TABLE、VIEW、INDEX、SYN、CLUSTER 等。注意,DDL 操作是隐性提交的,不能 Rollback。为什么需要 DDL 版本控制?数据库应用软件的版本迭代过程中难免需要修改 ORM 的数据模型(Data Model)即 DLL,例如:添加...

目录

数据库迁移与版本控制

所谓数据库迁移(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://blog.csdn.net/Jmilk/article/details/108967204

相关标签: 数据库设计原理