• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181  文章 - 15  trackbacks - 0
            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            My Tech blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            4.不同版本數(shù)據(jù)庫之間的數(shù)據(jù)遷移

            一旦你把程序和數(shù)據(jù)庫提交給用戶,那么只是重構(gòu)開發(fā)數(shù)據(jù)庫結(jié)構(gòu)就不是重構(gòu)的全部了。比如,如果一列被從一個表移動到另外一個表,這個操作也許通過一條Sql語句完成,首先把這一列從源表中刪除,然后添加到目的表中。一旦重構(gòu)好的系統(tǒng)處于穩(wěn)定狀態(tài)并將提交給用戶的時候,我們就不得不面對不同版本之間數(shù)據(jù)的遷移。在這里,我們將要看到不同的數(shù)據(jù)遷移策略之于數(shù)據(jù)庫重構(gòu)的不同影響。

            4.1數(shù)據(jù)庫模式的版本化

            我們需要把已有的數(shù)據(jù)庫數(shù)據(jù)遷移到新的數(shù)據(jù)庫中去。當然,在遷移過程當中,老的數(shù)據(jù)庫還將運轉(zhuǎn)。只有當數(shù)據(jù)的遷移完畢以后,老的數(shù)據(jù)庫模式才可以被摒棄。

            新老數(shù)據(jù)庫模式的存在有幾種不同的方式。你首先可以以版本來區(qū)分它們。比如起名為schema V1,schema V2之類。

            當然,數(shù)據(jù)庫中的表也同樣可以有版本號。比如Customer V1,Product V2,當然,這多少會給重構(gòu)的結(jié)果帶來一些影響。畢竟,外健關系、約束、觸發(fā)器都是和表名有關系的。一旦新版本的模式被創(chuàng)建,諸如此類與表名有關系的部分可能都需要進行調(diào)整。

            為了減少這種情況的發(fā)生,我們往往采取每一個模式對應一個版本號的方式。

            模式的名稱讓程序能夠辨識現(xiàn)在正在使用的是那個版本。大量的經(jīng)驗表明,這是數(shù)據(jù)遷移的一個先決條件。不要總以為大家都是使用的上一個版本的數(shù)據(jù)庫,而造成把前一個數(shù)據(jù)庫版本的數(shù)據(jù)混同更早版本的數(shù)據(jù)庫一起進行數(shù)據(jù)的遷移。因而每一個人都應當清楚他所使用的那個數(shù)據(jù)庫的版本是什么。

            4.2遷移步驟

            就像前面說的那樣,當開發(fā)的產(chǎn)品的受眾更多的時候,不要期待你的所有用戶都使用的是你的上一個版本的軟件。用戶往往會忽略一些版本的更新。

            每進行一次數(shù)據(jù)遷移,新的數(shù)據(jù)庫版本就是下一次數(shù)據(jù)遷移的源端。

            這樣,當新系統(tǒng)被安裝的時候,系統(tǒng)的版本識別器需要首先判斷當前的數(shù)據(jù)模式是什么版本,然后依版本逐次進行遷移,進而讓數(shù)據(jù)庫的版本達到最新的狀態(tài)。這就預示著每一個安裝包都要整合以前所有的數(shù)據(jù)遷移程序。對于那些跑了很長時間的重要系統(tǒng),這就是個問題了。因為有些老的數(shù)據(jù)遷移程序已經(jīng)不被新的操作系統(tǒng)所兼容了。在這種情況下,就需要做出一些判斷,挑選出那些真正適宜于當前操作系統(tǒng)的數(shù)據(jù)遷移程序進行打包發(fā)布。

            不要讓客戶以為一步就能夠把老數(shù)據(jù)庫中的數(shù)據(jù)遷移到新的數(shù)據(jù)庫中來。甚至可能必須要進行更多的步驟來進行數(shù)據(jù)遷移。

            dbrefactor3

            4.3當數(shù)據(jù)量很大時

            當數(shù)據(jù)量十分巨大時,數(shù)據(jù)遷移的時間長短就成為了問題。不能指望十億條數(shù)據(jù)在很短的時間內(nèi)就完成轉(zhuǎn)移。而你總不能為了轉(zhuǎn)移數(shù)據(jù)讓銀行停止營業(yè)吧。

            當然,從組織或技術(shù)視角看來,這個問題會有不同的解決辦法。從組織的角度,你就必須把握好什么時候去修改數(shù)據(jù)庫系統(tǒng),什么時候遷移數(shù)據(jù)在時間上才是充足的。并以此為依據(jù)制定你的時間表。對于數(shù)據(jù)庫的遷移來說,圣誕節(jié)或者東方的一些節(jié)日是些不錯的選擇。

            如果技術(shù)上允許的話,你可以嘗試進行增量遷移數(shù)據(jù)的方式。數(shù)據(jù)只會在系統(tǒng)要用到它們的時候才進行遷移。這樣的話,遷移的周期也會一定程度的延長,但是系統(tǒng)的活動總是不會被打斷。對那些需要7乘24小時運作的系統(tǒng)來說,這也是數(shù)據(jù)庫遷移的唯一途徑。

            增量遷移的一個先決條件就是應用系統(tǒng)能夠同時使用多個數(shù)據(jù)庫的版本。當訪問數(shù)據(jù)庫的時候,系統(tǒng)必須知道從哪個數(shù)據(jù)庫能夠取得數(shù)據(jù)。所選擇的那些數(shù)據(jù)將總會被填充到新的數(shù)據(jù)庫中,然后舊數(shù)據(jù)庫中相對應的數(shù)據(jù)被刪除。一旦舊數(shù)據(jù)庫不再包含任何數(shù)據(jù)的時候,它就可以下崗了。

            如果增量的數(shù)據(jù)遷移比你發(fā)布一個新版本應用程序的間歇期還要長,多于兩個的數(shù)據(jù)庫版本就會同時存在。

            4.4數(shù)據(jù)遷移的技術(shù)

            ETL工具可以大大簡化數(shù)據(jù)遷移。ETL即是Extract(抽取),Transform(轉(zhuǎn)換),Load(載入)。ETL工具支持從一個數(shù)據(jù)源抽取數(shù)據(jù),把抽取出來的數(shù)據(jù)進行轉(zhuǎn)換,然后把它們裝載到目標數(shù)據(jù)庫中去。ETL工具通常被用來整合不同的應用。這讓它們在EAI(Enterprise Application Integration)領域里面變得舉足輕重。

            不同版本之間的數(shù)據(jù)庫的數(shù)據(jù)遷移對于ETL來說只是一個附加用途。事實上,ETL被用來做比這重要的多的事情。這樣一個不幸的事實就產(chǎn)生了,作為附加用途來使用ETL,代價太昂貴了,畢竟ETL作為數(shù)據(jù)整合工具來發(fā)售,具有相當高的售價。

            幸運的是,在各個數(shù)據(jù)庫之間提供了一個相對“便宜”的ETL工具,那就是--SQL。使用SQL語句,數(shù)據(jù)可以簡單的抽取出來(使用Select),然后載入到另一個數(shù)據(jù)庫中(使用Insert,Update)。然而,SQL并沒有直接提供數(shù)據(jù)轉(zhuǎn)換的能力,但是記錄表或存儲過程是可以拿過來解決這些問題的。在記錄表中,源和目標值總是能夠和某個字段進行對應。這樣對于一個字段中數(shù)據(jù)的遷移總是可以通過Insert-Select命令來實現(xiàn)。對于那些打算修改枚舉類型的顯示值的人來說,這是一種值得推薦的做法。比如如果一個字段以前用M來代表男性,用F來代表女性,而現(xiàn)在則分別要用0和1來取代它們,我們就可以做一個記錄表來指示這種對應。

             可能現(xiàn)實中的一些數(shù)據(jù)遷移要復雜得多,這就必須編寫專門的數(shù)據(jù)遷移程序來做這些事情。今天,很多數(shù)據(jù)庫平臺允許直接在數(shù)據(jù)庫中運行JAVA程序。這使得數(shù)據(jù)遷移受益匪淺,因為數(shù)據(jù)不再需要從數(shù)據(jù)庫傳送到受理數(shù)據(jù)遷移的主機。因而數(shù)據(jù)遷移的效率將會大大提高。

            posted on 2007-08-16 22:19 littlegai 閱讀(179) 評論(0)  編輯 收藏 引用
            avtt天堂网久久精品| 久久精品人人做人人妻人人玩| 99久久精品日本一区二区免费| 国产精品禁18久久久夂久| 99国内精品久久久久久久| 久久婷婷色香五月综合激情| 亚洲va久久久噜噜噜久久男同| 72种姿势欧美久久久久大黄蕉 | 久久精品无码一区二区WWW| 性欧美丰满熟妇XXXX性久久久| 亚洲综合久久综合激情久久 | 久久国产精品无码一区二区三区 | 久久www免费人成精品香蕉| 婷婷久久综合九色综合绿巨人 | 久久免费观看视频| 精品国产VA久久久久久久冰| 久久精品国产99国产精品亚洲| 狠狠精品干练久久久无码中文字幕| 久久大香香蕉国产| 色播久久人人爽人人爽人人片AV| 久久99热狠狠色精品一区| 亚洲国产欧洲综合997久久| 久久久久成人精品无码| 久久国产精品一区二区| 久久精品无码午夜福利理论片| 2021国产精品久久精品| 性高湖久久久久久久久AAAAA| 色成年激情久久综合| 精品无码久久久久久午夜| 亚洲国产精品无码久久久不卡 | 日韩乱码人妻无码中文字幕久久| 久久精品无码一区二区三区日韩| 久久国产精品久久国产精品| 精品无码久久久久国产| 久久九九青青国产精品| 免费国产99久久久香蕉| 久久本道伊人久久| 色综合合久久天天综合绕视看| 久久久久综合网久久| 久久久久一本毛久久久| 2020国产成人久久精品|