• <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
            <2007年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            My Tech blog

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

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

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

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

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

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

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

            為了減少這種情況的發(fā)生,我們往往采取每一個(gè)模式對(duì)應(yīng)一個(gè)版本號(hào)的方式。

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

            4.2遷移步驟

            就像前面說(shuō)的那樣,當(dāng)開(kāi)發(fā)的產(chǎn)品的受眾更多的時(shí)候,不要期待你的所有用戶(hù)都使用的是你的上一個(gè)版本的軟件。用戶(hù)往往會(huì)忽略一些版本的更新。

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

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

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

            dbrefactor3

            4.3當(dāng)數(shù)據(jù)量很大時(shí)

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

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

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

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

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

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

            ETL工具可以大大簡(jiǎn)化數(shù)據(jù)遷移。ETL即是Extract(抽取),Transform(轉(zhuǎn)換),Load(載入)。ETL工具支持從一個(gè)數(shù)據(jù)源抽取數(shù)據(jù),把抽取出來(lái)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,然后把它們裝載到目標(biāo)數(shù)據(jù)庫(kù)中去。ETL工具通常被用來(lái)整合不同的應(yīng)用。這讓它們?cè)贓AI(Enterprise Application Integration)領(lǐng)域里面變得舉足輕重。

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

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

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

            posted on 2007-08-16 22:19 littlegai 閱讀(174) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久亚洲AV成人无码软件| 久久亚洲精品成人av无码网站| 久久久女人与动物群交毛片 | 午夜精品久久久久久影视777| 久久国产一区二区| 久久精品国产91久久综合麻豆自制 | 久久精品一区二区国产| 国产精品久久久久影视不卡| 日韩精品无码久久久久久| 久久A级毛片免费观看| 狠狠干狠狠久久| 国产精品成人久久久久三级午夜电影| 久久精品国产91久久麻豆自制| 99久久99久久精品国产片果冻| 久久国产精品免费一区| 久久综合狠狠综合久久97色| 伊人久久精品无码av一区| 久久天天躁狠狠躁夜夜avapp| 国产精品久久久久久影院| 办公室久久精品| 精品综合久久久久久97| 久久久久99精品成人片试看 | 无码人妻少妇久久中文字幕| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 99精品久久久久久久婷婷| 久久久久人妻一区精品性色av| 久久99中文字幕久久| 无码8090精品久久一区| 国产亚洲综合久久系列| 91精品国产91热久久久久福利 | 99久久婷婷免费国产综合精品| 国产精品成人久久久久三级午夜电影| 色99久久久久高潮综合影院| 性高湖久久久久久久久| 久久av免费天堂小草播放| 久久精品国产免费观看三人同眠| 久久精品9988| 久久久久久久久久久久中文字幕| 欧美日韩精品久久久免费观看| 精品久久久久久久久午夜福利| 久久久久国产|