4.不同版本數據庫之間的數據遷移
一旦你把程序和數據庫提交給用戶,那么只是重構開發數據庫結構就不是重構的全部了。比如,如果一列被從一個表移動到另外一個表,這個操作也許通過一條Sql語句完成,首先把這一列從源表中刪除,然后添加到目的表中。一旦重構好的系統處于穩定狀態并將提交給用戶的時候,我們就不得不面對不同版本之間數據的遷移。在這里,我們將要看到不同的數據遷移策略之于數據庫重構的不同影響。
4.1數據庫模式的版本化
我們需要把已有的數據庫數據遷移到新的數據庫中去。當然,在遷移過程當中,老的數據庫還將運轉。只有當數據的遷移完畢以后,老的數據庫模式才可以被摒棄。
新老數據庫模式的存在有幾種不同的方式。你首先可以以版本來區分它們。比如起名為schema V1,schema V2之類。
當然,數據庫中的表也同樣可以有版本號。比如Customer V1,Product V2,當然,這多少會給重構的結果帶來一些影響。畢竟,外健關系、約束、觸發器都是和表名有關系的。一旦新版本的模式被創建,諸如此類與表名有關系的部分可能都需要進行調整。
為了減少這種情況的發生,我們往往采取每一個模式對應一個版本號的方式。
模式的名稱讓程序能夠辨識現在正在使用的是那個版本。大量的經驗表明,這是數據遷移的一個先決條件。不要總以為大家都是使用的上一個版本的數據庫,而造成把前一個數據庫版本的數據混同更早版本的數據庫一起進行數據的遷移。因而每一個人都應當清楚他所使用的那個數據庫的版本是什么。
4.2遷移步驟
就像前面說的那樣,當開發的產品的受眾更多的時候,不要期待你的所有用戶都使用的是你的上一個版本的軟件。用戶往往會忽略一些版本的更新。
每進行一次數據遷移,新的數據庫版本就是下一次數據遷移的源端。
這樣,當新系統被安裝的時候,系統的版本識別器需要首先判斷當前的數據模式是什么版本,然后依版本逐次進行遷移,進而讓數據庫的版本達到最新的狀態。這就預示著每一個安裝包都要整合以前所有的數據遷移程序。對于那些跑了很長時間的重要系統,這就是個問題了。因為有些老的數據遷移程序已經不被新的操作系統所兼容了。在這種情況下,就需要做出一些判斷,挑選出那些真正適宜于當前操作系統的數據遷移程序進行打包發布。
不要讓客戶以為一步就能夠把老數據庫中的數據遷移到新的數據庫中來。甚至可能必須要進行更多的步驟來進行數據遷移。
4.3當數據量很大時
當數據量十分巨大時,數據遷移的時間長短就成為了問題。不能指望十億條數據在很短的時間內就完成轉移。而你總不能為了轉移數據讓銀行停止營業吧。
當然,從組織或技術視角看來,這個問題會有不同的解決辦法。從組織的角度,你就必須把握好什么時候去修改數據庫系統,什么時候遷移數據在時間上才是充足的。并以此為依據制定你的時間表。對于數據庫的遷移來說,圣誕節或者東方的一些節日是些不錯的選擇。
如果技術上允許的話,你可以嘗試進行增量遷移數據的方式。數據只會在系統要用到它們的時候才進行遷移。這樣的話,遷移的周期也會一定程度的延長,但是系統的活動總是不會被打斷。對那些需要7乘24小時運作的系統來說,這也是數據庫遷移的唯一途徑。
增量遷移的一個先決條件就是應用系統能夠同時使用多個數據庫的版本。當訪問數據庫的時候,系統必須知道從哪個數據庫能夠取得數據。所選擇的那些數據將總會被填充到新的數據庫中,然后舊數據庫中相對應的數據被刪除。一旦舊數據庫不再包含任何數據的時候,它就可以下崗了。
如果增量的數據遷移比你發布一個新版本應用程序的間歇期還要長,多于兩個的數據庫版本就會同時存在。
4.4數據遷移的技術
ETL工具可以大大簡化數據遷移。ETL即是Extract(抽取),Transform(轉換),Load(載入)。ETL工具支持從一個數據源抽取數據,把抽取出來的數據進行轉換,然后把它們裝載到目標數據庫中去。ETL工具通常被用來整合不同的應用。這讓它們在EAI(Enterprise Application Integration)領域里面變得舉足輕重。
不同版本之間的數據庫的數據遷移對于ETL來說只是一個附加用途。事實上,ETL被用來做比這重要的多的事情。這樣一個不幸的事實就產生了,作為附加用途來使用ETL,代價太昂貴了,畢竟ETL作為數據整合工具來發售,具有相當高的售價。
幸運的是,在各個數據庫之間提供了一個相對“便宜”的ETL工具,那就是--SQL。使用SQL語句,數據可以簡單的抽取出來(使用Select),然后載入到另一個數據庫中(使用Insert,Update)。然而,SQL并沒有直接提供數據轉換的能力,但是記錄表或存儲過程是可以拿過來解決這些問題的。在記錄表中,源和目標值總是能夠和某個字段進行對應。這樣對于一個字段中數據的遷移總是可以通過Insert-Select命令來實現。對于那些打算修改枚舉類型的顯示值的人來說,這是一種值得推薦的做法。比如如果一個字段以前用M來代表男性,用F來代表女性,而現在則分別要用0和1來取代它們,我們就可以做一個記錄表來指示這種對應。
可能現實中的一些數據遷移要復雜得多,這就必須編寫專門的數據遷移程序來做這些事情。今天,很多數據庫平臺允許直接在數據庫中運行JAVA程序。這使得數據遷移受益匪淺,因為數據不再需要從數據庫傳送到受理數據遷移的主機。因而數據遷移的效率將會大大提高。
posted on 2007-08-16 22:19
littlegai 閱讀(179)
評論(0) 編輯 收藏 引用