架構遷移:SQL Server Data Tools 與 Liquibase 和 Flyway
這似乎是一個愚蠢的問題,但我一直在研究用於架構遷移的開源解決方案,即 Liquibase 和 Flyway。
但是,我的老闆告訴我,SQL Server Data Tools (SSDT) 可以完成同樣的工作。我不確定是否同意,但我在網際網路上幾乎找不到直接將其與 Liquibase 和/或 Flyway 進行比較的內容。
我的觀點是 SSDT 是 SQL Server 的開發、數據建模和設計工具,還支持模式比較(並生成其腳本)和原始碼控制。它解決了一個不同的問題,儘管在架構遷移的某些方面可能與 Liquibase/Flyway 有一些重疊。但作為一個整體架構遷移工具,Liquibase 和 Flyway 是完全專用的工具,而 SSDT 更多的是用於數據庫的設計和開發。
即使只是說沒有比較並且 SSDT 本身根本不是模式遷移工具,任何意見都將不勝感激。
SSDT 可與 Liquibase/Flyway 相媲美,因為它做了他們所做的事情,但採用了不同的方法。使用 SSDT,您擁有開發環境,因此您可以獲得諸如去定義、查找參考和智能感知以及將項目編譯到 dacpac 中然後將該 dacpac 部署到數據庫的能力。
進行部署的 SSDT 方式(和 redgate sql 比較方式)是聲明您想要的內容,因此如果您想更改如下所示的表:
create table a(id int)
到一個看起來像的表:
create table a(id int, another_column varchar(12))
使用 SSDT,您只需將表定義更改為第二個,然後讓 SSDT 擔心如何升級它(它是否可以更改表、添加列或更改列順序,因此您需要重建表等)。
使用 Liquibase(DbUp、ReadyRoll、手動方法等),在這種情況下,您必須自己編寫更改表並確保以正確的順序執行腳本,請考慮以下情況:
- 第 1 版 - 在表上創建列 hello
- 第 2 版 - 將列 hello 重命名為 joe_blogs
- 第 3 版 - 將列 joe_blogs 重命名為 hello
- 第 4 版 - 創建列 joe_blogs
如果錯過了任何版本,則下一個版本都無法繼續。
升級腳本(Liquibase、DbUp 等)的好處:
- 您可以完全控制腳本
- DBA/開發人員已經習慣了
比較/合併的好處(SSDT、Redgate SQL 比較):
- 不必編寫升級腳本
- 只需比較和合併該版本即可輕鬆獲得任何特定版本
升級腳本的缺點:
- 必須按順序執行
- 靠人不犯錯
- 可能會很慢,特別是如果您有很多更改
- 除非您的團隊在不同環境(開發、測試、登台、產品等)中非常有紀律,否則數據庫通常會變得不同步,從而導致任何測試無效
- 降級版本意味著編寫您已經編寫的所有腳本的反向
使用比較/合併的缺點:
- 工具不是 100% 受信任的,也許是不公平的
- SSDT 需要一個工作項目,許多數據庫的程式碼實際上並沒有編譯或執行(想想刪除的表而不是過程等),我在我繼承的大約 8/10 數據庫中看到了這一點:)
- 許多 DBA/開發人員猶豫是否要放棄使用 SSMS/記事本進行開發
就我個人而言,我真的認為 SSDT 是一個專業的開發環境,這意味著我可以專注於編寫有用的程式碼和測試,而不是編寫升級腳本,而升級腳本本身只是達到目的的一種手段。
你徵求意見,所以你去:)
和