重點摘要#

  • 原始碼控制和持續整合不應只管程式碼,資料和 schema 變更也需要同等管控
  • 手動的資料庫遷移流程脆弱且容易出錯
  • 資料庫變更應該是自動化建置流程的一部分
  • 需要能將資料庫還原到已知狀態的能力

詳細內容#

原始碼控制和持續整合是管理應用程式建置和部署流程的優秀工具。然而,除了原始碼之外,schema 和資料變更也是這個流程的重要環節,需要類似的管控。

典型的手動資料庫遷移噩夢#

如果你的建置和部署流程需要一長串手動步驟來處理資料更新,那就要小心了。典型流程看起來像這樣:

  1. 建立需要按順序執行的腳本清單
  2. 將腳本寄給專門的資料庫人員
  3. 資料庫人員將腳本複製到 cron job 執行的位置
  4. 檢查腳本執行日誌,祈禱一切成功
  5. 執行驗證腳本並抽查資料
  6. 回歸測試應用程式,看看什麼會炸掉
  7. 撰寫腳本插入遺漏資料並修復問題
  8. 重複以上步驟

這種複雜的手工流程創造了大量流程崩潰的機會。由 schema 和資料變更引起的錯誤不一定能被單元測試捕捉,往往在建置遷移後才會高調地爆發。

自動化的價值#

  • 資料庫問題通常難以手動還原,且解決方案更難驗證
  • 一個能將資料庫還原到已知狀態的完全自動化建置流程,在修復嚴重問題時價值無比
  • 如果你無法將資料庫還原到與特定建置版本相容的狀態,你就和無法快速回退程式碼變更一樣脆弱

盡早將資料和 schema 管理納入自動化建置和測試流程,並包含一個「復原按鈕」。這將帶來豐厚回報——最好的情況是省去深夜緊急修復的痛苦,最壞的情況也能讓團隊有信心進行資料存取層的重構。

— By Chad LaVigne