我很好奇,当我第一次听说数据库迁移这个术语时,它明确地涉及将整个数据库从一个平台移动到另一个平台。
但是,最近我不得不构建一个需要自己设置数据库的服务器。然后我偶然发现了这个名为 Alembic 的 Python 库。显然,它也被称为“数据库迁移”工具,因为它的唯一目的是不按顺序说,是一种用于数据库的 git。这让我个人感到困惑。有人可以阐明我理解的数据库迁移与作为跟踪数据库更改的工具的数据库迁移之间的区别。
同样,我可能无知并且可能错过了其中一些明显的差异,但如果有人能启发我,我将不胜感激。
就个人而言,我和你一样理解数据库迁移。但是,我不确定是否有一个单一的正式定义。可能像许多其他计算术语一样,每个术语都有自己的定义。
在 Wikipedia 中(因为每个人都可以编辑文章,这显示了不同的人如何以不同的方式使用相同的术语):
迁移一词可以表示“从某物的一个部分移动到另一个部分”。您所描述的(参见 Fat P 的答案)是模式迁移。从该领域的个人经验来看,这些是更常见的迁移类型:
数据迁移:将数据移动到另一个系统,通常是从一个数据库软件到另一个
数据库或主机迁移:将数据库移动到另一台主机,但通常在同一个数据库软件上,可能在更高版本上
架构迁移:更改数据库的架构
在谈论不同数据库产品之间的“迁移”时(尚未)提及:
'当然'转换'一词意味着理解数据库架构、DDL、SQL 等方面的差异。
虽然这两组工具通常是不同的,但我认为可以说它们都意味着“迁移”。
对于应用代码,我们一般讲“部署”或“发布”:新版本替换旧版本,通常是一次性完成。我们可能还会谈论打补丁,但这仍然有效地替换了代码。
对于数据库,我们一般不会删除旧的数据库并创建一个新的。有时,我们只是在现有功能的基础上添加新功能,但通常,我们需要以某种方式转换模式。这种转变在这两种情况下都是“迁移”的意思:
两种类型的“迁移”由不同的专业工具支持,但概念是相同的:您为工具提供初始模式和所需模式,以及关于它们如何关联的一些提示;并且该工具生成必要的 SQL 和 DDL 命令以将您的实时数据从一个模式“迁移”到另一个模式。
正如您所观察到的,一个主要区别是用于管理应用程序所需模式的工具通常还包括或集成版本控制功能。这是因为在这种情况下,您可能会频繁进行小型迁移,并且需要在不同时间管理它们到不同环境的部署。专注于在完全不同的数据库引擎之间迁移的工具不需要过多关注此功能,而是可能具有连续数据复制等功能,您可以在其中并行运行两个数据库。