Migration

術語數據庫遷移

  • April 28, 2022

我很好奇,當我第一次聽說數據庫遷移這個術語時,它明確地涉及將整個數據庫從一個平台移動到另一個平台。

但是,最近我不得不建構一個需要自己設置數據庫的伺服器。然後我偶然發現了這個名為 Alembic 的 Python 庫。顯然,它也被稱為“數據庫遷移”工具,因為它的唯一目的是不按順序說,是一種用於數據庫的 git。這讓我個人感到困惑。有人可以闡明我理解的數據庫遷移與作為跟踪數據庫更改的工具的數據庫遷移之間的區別。

同樣,我可能無知並且可能錯過了其中一些明顯的差異,但如果有人能啟發我,我將不勝感激。

雖然這兩組工具通常是不同的,但我認為可以說它們都意味著“遷移”。

對於應用程式碼,我們一般講“部署”或“發布”:新版本替換舊版本,通常是一次性完成。我們可能還會談論打更新檔,但這仍然有效地替換了程式碼。

對於數據庫,我們一般不會刪除舊的數據庫並創建一個新的。有時,我們只是在現有功能的基礎上添加新功能*,但通常,我們需要以某種方式轉換*模式。這種轉變在這兩種情況下都是“遷移”的意思:

  • 當從一個數據庫引擎遷移到另一個數據庫引擎時,我們通常必須從舊數據庫中提取數據,以某種方式對其進行轉換,然後將其插入到新數據庫中。
  • 當將實時數據庫從應用程序版本 N 所需的模式更改為版本 N+1 所需的模式時,我們可能必須做類似的事情:獲取舊表 X 的內容,填充新表 Y,然後刪除表 X .

兩種類型的“遷移”由不同的專業工具支持,但概念是相同的:您為工具提供初始模式和所需模式,以及關於它們如何關聯的一些提示;並且該工俱生成必要的 SQL 和 DDL 命令以將您的實時數據從一個模式“遷移”到另一個模式。

正如您所觀察到的,一個主要區別是用於管理應用程序所需模式的工具通常還包括或集成版本控制功能。這是因為在這種情況下,您可能會頻繁進行小型遷移,並且需要在不同時間管理它們到不同環境的部署。專注於在完全不同的數據庫引擎之間遷移的工具不需要過多關注此功能,而是可能具有連續數據複製等功能,您可以在其中並行執行兩個數據庫。

引用自:https://dba.stackexchange.com/questions/311421