蜜果私塾:異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)校驗(yàn)方案探討
文:阿蜜果
日期:2011-8-5
版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處
最近在琢磨異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)校驗(yàn)的事情,想來(lái)想去覺(jué)得都不是易事,我想出了一個(gè)方案,但最終因?yàn)楣ぷ髁俊r(shí)間等原因,項(xiàng)目決定不再進(jìn)行數(shù)據(jù)校驗(yàn),在這里分享一下,拋磚引玉,希望得到同仁們的一些更好的方案。
1、為什么要進(jìn)行數(shù)據(jù)校驗(yàn)?
首先要回答這個(gè)問(wèn)題:“為什么要進(jìn)行異構(gòu)數(shù)據(jù)庫(kù)的數(shù)據(jù)校驗(yàn)?zāi)兀?#8221;本博的前兩篇文章探討了進(jìn)行異構(gòu)數(shù)據(jù)庫(kù)同步的方案,但是不論使用何種方式進(jìn)行同步,都可能因?yàn)楦鞣N原因?qū)е聝蛇厰?shù)據(jù)庫(kù)的不同步,例如一方的SQL語(yǔ)句執(zhí)行成功,而另一方轉(zhuǎn)換成新的SQL語(yǔ)句后執(zhí)行失敗,而沒(méi)有得到實(shí)時(shí)處理,或者同步程序存在bug等原因。
進(jìn)行數(shù)據(jù)校驗(yàn)的原因是為了保證兩邊數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性和完整性。
數(shù)據(jù)不一致可能導(dǎo)致的結(jié)果:
(1)使得用戶(hù)進(jìn)行了某個(gè)設(shè)置,但未見(jiàn)生效;
(2)用戶(hù)已經(jīng)刪除了某設(shè)置,但仍然繼續(xù)生效;
(3)某個(gè)用戶(hù)在一方平臺(tái)已經(jīng)注銷(xiāo)或到期,而在另一平臺(tái)仍然可以使用等等。
貼幾段關(guān)于數(shù)據(jù)一致性和數(shù)據(jù)完整性的代碼:
數(shù)據(jù)一致性通常指關(guān)聯(lián)數(shù)據(jù)之間的邏輯關(guān)系是否正確和完整。而數(shù)據(jù)存儲(chǔ)的一致性模型則可以認(rèn)為是存儲(chǔ)系統(tǒng)和數(shù)據(jù)使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統(tǒng)所承諾的訪問(wèn)結(jié)果。
數(shù)據(jù)庫(kù)完整性(Database Integrity)是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫(kù)完整性由各種各樣的完整性約束來(lái)保證,因此可以說(shuō)數(shù)據(jù)庫(kù)完整性設(shè)計(jì)就是數(shù)據(jù)庫(kù)完整性約束的設(shè)計(jì)。數(shù)據(jù)完整性包括:實(shí)體完整性、域完整性、參照完整性和用戶(hù)定義完整性。可以使用主鍵、check約束和外鍵等來(lái)實(shí)現(xiàn)。
為了保證數(shù)據(jù)庫(kù)的一致性和完整性,設(shè)計(jì)人員往往會(huì)設(shè)計(jì)過(guò)多的表間關(guān)聯(lián),盡可能的降低數(shù)據(jù)的冗余。表間關(guān)聯(lián)是一種強(qiáng)制性措施,建立后,對(duì)父表和子表的插入、更新、刪除操作均要占用系統(tǒng)的開(kāi)銷(xiāo)。
如果數(shù)據(jù)冗余低,數(shù)據(jù)的完整性容易得到保證,但增加了表間連接查詢(xún)的操作,為了提高系統(tǒng)的響應(yīng)時(shí)間,合理的數(shù)據(jù)冗余也是必要的。使用規(guī)則和約束來(lái)防止系統(tǒng)操作人員誤輸入造成數(shù)據(jù)的錯(cuò)誤是設(shè)計(jì)人員的另一種常用手段,但是,不必要的規(guī)則和約束也會(huì)占用系統(tǒng)的不必要開(kāi)銷(xiāo),需要注意的是,約束對(duì)數(shù)據(jù)的有效性驗(yàn)證要比規(guī)則快。所有這些,設(shè)計(jì)人員在設(shè)計(jì)階段應(yīng)根據(jù)系統(tǒng)操作的類(lèi)型、頻度加以均衡考慮。
2、哪些是需要關(guān)心的表和字段?
異構(gòu)數(shù)據(jù)庫(kù)的雙方需要確定哪些是需要進(jìn)行數(shù)據(jù)校驗(yàn)的表?需要關(guān)心的字段是哪些?哪一些字段不會(huì)影響到業(yè)務(wù)可以不去關(guān)心?畢竟進(jìn)行數(shù)據(jù)校驗(yàn)是一個(gè)耗時(shí)耗力的活。
3、采用何種數(shù)據(jù)校驗(yàn)方案
我感覺(jué)思維受限,暫時(shí)只想到這個(gè)個(gè)方案:
(1)關(guān)鍵表的總量比較。
(2)用戶(hù)信息的抽樣校驗(yàn):因?yàn)橹饕P(guān)心跟用戶(hù)有關(guān)的信息,因此對(duì)用戶(hù)信息進(jìn)行抽樣檢驗(yàn)。隨機(jī)抽取部分用戶(hù)(例如:10000個(gè)用戶(hù))對(duì)其各項(xiàng)信息進(jìn)行比對(duì),兩邊的數(shù)據(jù)按照一樣的XML Schema生成,可使用各種方式進(jìn)行比對(duì)(例如Shell進(jìn)行文件比對(duì))。
數(shù)據(jù)校驗(yàn)包括的程序大致如下:
(1)隨機(jī)抽樣程序
隨機(jī)抽取若干(例如10000)號(hào)碼的程序
(2)數(shù)據(jù)校驗(yàn)定時(shí)程序
同步用戶(hù)下的“數(shù)據(jù)校驗(yàn)定時(shí)程序”定時(shí)讀取(例如每天的晚上12點(diǎn))需要進(jìn)行數(shù)據(jù)校驗(yàn)的用戶(hù)信息,對(duì)每一行的用戶(hù)啟動(dòng)一個(gè)“數(shù)據(jù)校驗(yàn)處理程序”的自動(dòng)機(jī)進(jìn)行處理。
(3)數(shù)據(jù)校驗(yàn)處理程序
每個(gè)“數(shù)據(jù)校驗(yàn)處理程序”自動(dòng)機(jī)只處理一個(gè)用戶(hù)信息,它通過(guò)查詢(xún)?nèi)舾杀淼玫皆撚脩?hù)的詳細(xì)信息,并根據(jù)定義好的XML格式寫(xiě)入XML文件中。兩邊同步用戶(hù)采用一樣的XML Schema,按照一樣的排序生成XML文檔,XML Schema有待在校驗(yàn)數(shù)據(jù)確定后進(jìn)行定義。
(4)數(shù)據(jù)校驗(yàn)比對(duì)程序
該程序?qū)Ρ葘?duì)(例如通過(guò)Linux命令進(jìn)行比對(duì))兩個(gè)同步用戶(hù)下生成的XML文件,將不一致的用戶(hù)信息寫(xiě)入錯(cuò)誤日志文件中。
歡迎大家提出好的想法!開(kāi)拓下我的思路。
posted on 2011-08-05 17:43
阿蜜果 閱讀(2235)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
database 、
解決方案