摘 要:在課題組針對生物數(shù)據(jù)源的特點(diǎn)建立的元倉庫的基礎(chǔ)上,重點(diǎn)討論元倉庫與源數(shù)據(jù)庫的元數(shù)據(jù)信息同步的策略,該方案解決了當(dāng)源數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化引起其元數(shù)據(jù)改變時(shí),元倉庫中元數(shù)據(jù)的懸掛問題。關(guān)鍵詞:元數(shù)據(jù); 異構(gòu)數(shù)據(jù)庫; 同步; 懸掛
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A
文章編號:1004-373X(2010)17-0146-04
Research and Design of Metadata Synchronization Strategy of Source
Database and Metadata Warehouse
YE Guo-quan1,2, NING Hong2
(1.School of Computer Science, National University of Defense Technology, Changsha 410073, China; 2.Medical College of CAPF, Tianjin 300162, China)
Abstract: The synchronization strategy of the source database and metadata warehouse is introduced based on the established metadata warehouse according to the characteristics of biological data source. This method solved the problem of metadata′s suspension in the metadata warehouse when the metadata changed by the source database structure.Keywords: metadata; heterogeneous database; synchronization; suspension
0 引 言
近年來,隨著蛋白質(zhì)組學(xué)技術(shù)的普及和基礎(chǔ)研究的深入,生物信息學(xué)正面臨一系列新的挑戰(zhàn)。對高度復(fù)雜的海量蛋白質(zhì)組學(xué)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行存儲、共享與整合即是其中最重要的問題之一。各個(gè)數(shù)據(jù)源在物理上的分布、結(jié)構(gòu)上的互異以及語義上的差異成為了對實(shí)驗(yàn)數(shù)據(jù)進(jìn)行共享與整合的三大瓶頸。
各個(gè)數(shù)據(jù)源的元數(shù)據(jù)不僅包含了數(shù)據(jù)的名稱、類型等信息,還提供了數(shù)據(jù)的上下文描述信息,如果將各數(shù)據(jù)源的元數(shù)據(jù)按照一個(gè)統(tǒng)一的標(biāo)準(zhǔn)提取出來集中存放在一個(gè)元數(shù)據(jù)庫中,將集成的元數(shù)據(jù)信息與用戶建立的用戶模式的相應(yīng)字段進(jìn)行關(guān)聯(lián),就能夠通過解析用戶模式得到對應(yīng)的各數(shù)據(jù)源數(shù)據(jù)信息;將獲得的各數(shù)據(jù)源查詢結(jié)果進(jìn)行連接、合并等操作,并按用戶模式進(jìn)行輸出,就能夠?qū)崿F(xiàn)數(shù)據(jù)的共享和整合。根據(jù)以上分析,課題組提出了基于元數(shù)據(jù)的蛋白質(zhì)組學(xué)數(shù)據(jù)資源共享與整合方案,并在此基礎(chǔ)上已經(jīng)實(shí)現(xiàn)了針對關(guān)系數(shù)據(jù)庫中各異域異構(gòu)的源數(shù)據(jù)庫中的元數(shù)據(jù)信息集成到CWM的元倉庫模型中。但是元倉庫的管理員并不能控制源數(shù)據(jù)庫(以下的源數(shù)據(jù)庫均為關(guān)系數(shù)據(jù)庫)中的元數(shù)據(jù)的變化,如果源數(shù)據(jù)庫的元數(shù)據(jù)信息發(fā)生了改變,而元倉庫不能進(jìn)行及時(shí)更新同步的話,就有可能造成元數(shù)據(jù)的懸掛,對用戶的查詢結(jié)果產(chǎn)生不可估量的影響。如何捕獲源數(shù)據(jù)庫中的結(jié)構(gòu)變化信息,并將該元數(shù)據(jù)追加到元數(shù)據(jù)倉庫中去,成為解決問題的重點(diǎn)。
1 現(xiàn)有同步策略的分析與選擇
目前關(guān)于數(shù)據(jù)同步策略的研究大多針對數(shù)據(jù)庫中數(shù)據(jù)的變化,而不是針對源數(shù)據(jù)庫結(jié)構(gòu)的變化,但其思想可以借鑒。數(shù)據(jù)同步的基礎(chǔ)是對象變化捕獲,它直接決定了數(shù)據(jù)同步的更新方式和選時(shí)方式。變化捕獲不僅要獲得復(fù)制對象的變化序列或當(dāng)前映像,還要在對等式復(fù)制時(shí)提供盡可能詳細(xì)的控制信息。通過對當(dāng)前使用捕獲方法的綜合分析,目前主要有6種基本變化捕獲形式,它們是:基于快照法;基于觸發(fā)器法;基于日志法;基于API法;影子表法;變更軌跡表法。由于基于快照發(fā)、影子表法和變更軌跡法的核心思想是變化后的數(shù)據(jù)庫信息與原數(shù)據(jù)庫信息進(jìn)行比較,最終得出變化的結(jié)果,這種方法效率比較低下,而且主流的數(shù)據(jù)庫管理系統(tǒng)并沒有提供關(guān)于數(shù)據(jù)庫結(jié)構(gòu)的快照信息,因此這三種方式不太適合對數(shù)據(jù)庫結(jié)構(gòu)變化的捕捉;基于API法主要適用于小型的非關(guān)系型的數(shù)據(jù)庫,并且其是無法捕捉到的那些不經(jīng)過API的操作;基于觸發(fā)器法和基于日志法這兩種方法運(yùn)行的效率和通用性都比較高,但基于日志法的實(shí)現(xiàn)方法相對而言更加復(fù)雜。在綜合分析上述6種方法的基礎(chǔ)上,考慮到目前課題組主要考慮關(guān)系數(shù)據(jù)庫的集成,并且各主流的RDBMS如SQL Server,Oracle,MySQL,DB2等都提供了DDL(該觸發(fā)器主要在響應(yīng)數(shù)據(jù)定義語言語句時(shí)執(zhí)行存儲過程)的觸發(fā)器,這里選擇基于觸發(fā)器法來捕獲數(shù)據(jù)庫結(jié)構(gòu)的變化信息。這樣可以利用DDL觸發(fā)器來捕捉類似“用戶建立新表”這類結(jié)構(gòu)變化操作。
2 基于DDL觸發(fā)器的元數(shù)據(jù)同步策略設(shè)計(jì)
經(jīng)過以上分析,最終設(shè)計(jì)了一個(gè)基于DDL觸發(fā)器的元倉庫與源數(shù)據(jù)庫的元數(shù)據(jù)信息同步策略,其基本思想如圖1所示。該方法首先通過各關(guān)系數(shù)據(jù)庫的DDL觸發(fā)器捕獲到其元數(shù)據(jù)的變化信息并保存到源數(shù)據(jù)庫結(jié)構(gòu)變化信息表中,當(dāng)元倉庫的管理者向各數(shù)據(jù)源發(fā)送同步請求時(shí),將信息表中的信息經(jīng)過SQL語句清理緩沖器整理后,通過網(wǎng)絡(luò)傳送到管理元倉庫的服務(wù)器中,元倉庫服務(wù)器最終經(jīng)過詞法分析器將源數(shù)據(jù)庫的結(jié)構(gòu)變化信息更新到元倉庫中。
圖1 元倉庫與源數(shù)據(jù)庫的元數(shù)據(jù)信息同步的流程圖
2.1 DDL觸發(fā)器介紹
DDL觸發(fā)器是一種特殊的觸發(fā)器,它在響應(yīng)數(shù)據(jù)定義語言(DDL)語句時(shí)觸發(fā)。它們可以用于在數(shù)據(jù)庫中執(zhí)行管理任務(wù),例如,審核以及規(guī)范數(shù)據(jù)庫操作。使用DDL觸發(fā)器,可以達(dá)到以下幾種目的:第一,要防止對數(shù)據(jù)庫架構(gòu)進(jìn)行某些更改。 第二,希望數(shù)據(jù)庫中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫架構(gòu)中的更改。 第三,要記錄數(shù)據(jù)庫架構(gòu)中的更改或事件。與標(biāo)準(zhǔn)的DML觸發(fā)器一樣,DDL觸發(fā)器在響應(yīng)事件時(shí)執(zhí)行存儲過程。 但與標(biāo)準(zhǔn)的DML觸發(fā)器不同的是,它們并不在響應(yīng)對表或視圖的UPDATE,INSERT或DELETE語句時(shí)執(zhí)行存儲過程。 它們主要在響應(yīng)數(shù)據(jù)定義語言(DDL)語句執(zhí)行存儲過程。 這些語句包括 CREATE,ALTER,DROP,GRANT,DENY,REVOKE和UPDATE STATISTICS等語句,然而這些語句正是引起源數(shù)據(jù)庫的元數(shù)據(jù)信息改變的操作,所以通過DDL觸發(fā)器就能夠方便地獲得源數(shù)據(jù)庫的結(jié)構(gòu)變化信息。
2.2 源數(shù)據(jù)庫變化捕捉器的設(shè)計(jì)
首先根據(jù)源數(shù)據(jù)庫不同的DBMS編寫相應(yīng)的模塊,通過該模塊調(diào)用DDL觸發(fā)器,將源數(shù)據(jù)庫中的結(jié)構(gòu)變化的信息保存到源數(shù)據(jù)庫結(jié)構(gòu)變化信息表中。以關(guān)系數(shù)據(jù)庫中的SQLServer為例,可以通過在其內(nèi)部建立DDL觸發(fā)器捕獲捕獲其的結(jié)構(gòu)變化信息,例如:特定數(shù)據(jù)庫中某些表的信息變化,表的刪除、添加和表的屬性字段的更新等,都可以通過DDL觸發(fā)器捕獲到。在數(shù)據(jù)庫中建立好一個(gè)DDL觸發(fā)器后,調(diào)用SQLServer系統(tǒng)自帶的函數(shù) ChangeCatch(),就可以捕獲有關(guān)激發(fā) DDL 觸發(fā)器的事件的信息,并將其保存到ChangeInfor日志表中。但是ChangeCatch()函數(shù)捕捉到的是xml 值,而這里需要的是SQL腳本,因此要采用以下的命令對其進(jìn)行解析:
SET@cmd=LTRIM(RTRIM(REPLACE(@cmd,″,″)))
這樣當(dāng)對源數(shù)據(jù)庫進(jìn)行修改時(shí),DDL觸發(fā)器就會(huì)將修改的信息捕捉,并保存到數(shù)據(jù)庫的ChangeInfor的數(shù)據(jù)庫結(jié)構(gòu)變化信息表中。下面的數(shù)據(jù),是通過以上方法在SQLServer數(shù)據(jù)庫中捕獲到的結(jié)構(gòu)變化信息的SQL腳本,其結(jié)果如圖2所示。
圖2 源數(shù)據(jù)庫結(jié)構(gòu)變化信息表
以上的示例展示了該方法在關(guān)系數(shù)據(jù)庫SQLServer中的實(shí)現(xiàn)方法,在其他的關(guān)系數(shù)據(jù)庫中,也可以效仿上面的方法,實(shí)現(xiàn)數(shù)據(jù)庫結(jié)構(gòu)信息變化的捕獲,這里不再贅述。
2.3 SQL語句清理緩沖器的設(shè)計(jì)
由DDL觸發(fā)器捕獲的數(shù)據(jù)庫的結(jié)構(gòu)變化信息是將源數(shù)據(jù)庫中所有的結(jié)構(gòu)變化信息,都以SQL語句的形式存儲到相應(yīng)的表格信息中。由于這些信息沒有經(jīng)過篩選和清理,因此這些數(shù)據(jù)信息是雜亂無章的,如果直接用這些數(shù)據(jù)信息對元倉庫進(jìn)行更新的話,有可能會(huì)造成一些操作的冗余和無效的操作,浪費(fèi)元倉庫服務(wù)器的資源。例如:在一個(gè)源數(shù)據(jù)庫中,由于某種需要,對庫中的某個(gè)表格A的結(jié)構(gòu)進(jìn)行了一些相應(yīng)的改動(dòng)后,DBA又將該表刪除。那么無疑DDL觸發(fā)器會(huì)將對表格A的改動(dòng)操作和刪除操作的SQL語句都進(jìn)行了保存,如果直接通過DDL觸發(fā)器得到的信息與元倉庫中的元數(shù)據(jù)進(jìn)行同步一致的話,那么原來對表A的修改操作,使得在元倉庫中相應(yīng)的元數(shù)據(jù)也應(yīng)進(jìn)行修改。毋庸置疑這些操作基本上對元倉庫的最終結(jié)構(gòu)來說是無用的。因?yàn)樽罱K該表在源數(shù)據(jù)庫中被刪除。以上這種情況在源數(shù)據(jù)庫與元倉庫的一致性過程中還有很多。為了避免這些無用的操作,這里設(shè)計(jì)一個(gè)源數(shù)據(jù)庫的SQL緩沖清理器。設(shè)計(jì)的基本原則是:首先將DDL觸發(fā)器捕捉到的源數(shù)據(jù)庫的變化信息保存到一張臨時(shí)的信息表中,當(dāng)元倉庫的管理者向源數(shù)據(jù)庫提出獲得變化信息的請求時(shí),先對這些信息進(jìn)行清理,拿上面表A的例子來說,通過緩沖清理器的分析處理之后,只需要最終把表A刪除的信息傳送到元倉庫的服務(wù)器的相應(yīng)模塊中進(jìn)行處理即可。這樣不但解決了元倉庫更新時(shí)無效操作等問題,還減少了網(wǎng)絡(luò)間數(shù)據(jù)的傳送量。源數(shù)據(jù)庫結(jié)構(gòu)變化捕捉器的總體結(jié)構(gòu)如圖3所示。
圖3 源數(shù)據(jù)結(jié)構(gòu)變化捕捉器的總體結(jié)構(gòu)圖
2.4 元倉庫更新的設(shè)計(jì)
當(dāng)元倉庫的管理者決定對元倉庫進(jìn)行更新時(shí),首先通過Internet獲得源數(shù)據(jù)庫的結(jié)構(gòu)變化信息,然后利用語法分析器對這些結(jié)構(gòu)變化的SQL語句進(jìn)行語法分析,提取變化的元數(shù)據(jù),對元倉庫進(jìn)行相應(yīng)修改。一般與關(guān)系數(shù)據(jù)庫結(jié)構(gòu)變化相關(guān)的SQL語句主要有表1所列情況。
表1 SQL的數(shù)據(jù)定義語句
操作對象操作方式
創(chuàng)建刪除修改
模式Create SchemaDrop Schema
表Create TableDrop TableAlter Table
視圖Create ViewDrop View
索引Create IndexDrop Index
SQL通常不提供修改模式定義、修改視圖定義和修改索引定義等操作。用戶如果想修改這些對象,只能先將他們刪除掉,然后再進(jìn)行重建。此外,SQL語言用Alter Table 語句修改基本表,修改的內(nèi)容一般有以下幾種情況:
Alter Table <表名>
添加:[ ADD <新列名> <數(shù)據(jù)類型> [完整性約束] ]
刪除:[ Drop Column <列名> <完整性約束名> ]
修改:[ Alter Column <列名> <數(shù)據(jù)類型> ]
故此,只需設(shè)計(jì)語法分析器,分析上述SQL語句,一種結(jié)構(gòu)變化對應(yīng)一個(gè)模塊函數(shù)。提取函數(shù)是按照SQL腳本的BNF范式進(jìn)行提取的。例如,當(dāng)語法分析器分析得到某條SQL語句中包含“Create Table”,則自動(dòng)調(diào)用CreateTable(),將此新建的表及其所屬的內(nèi)容的元數(shù)據(jù)信息提取出來,并把這些元數(shù)據(jù)信息轉(zhuǎn)換成元倉庫中對應(yīng)類的對象。其他的操作方式也是通過類似的方法,遇到Drop時(shí)調(diào)用刪除模塊進(jìn)行提取,遇到Alter時(shí)則需要根據(jù)其對表的不同的操作,采取不同的應(yīng)對措施。
當(dāng)元數(shù)據(jù)提取完畢并通過完整性檢查后,元數(shù)據(jù)以對象的形式存在于緩存模塊中,根據(jù)元數(shù)據(jù)的更新情況將其分成兩組,一組為需要添加的元數(shù)據(jù),另一組為需要?jiǎng)h除的元數(shù)據(jù)。由于修改操作被分成了刪除和添加兩部分,為了避免添加過程的冗余,先對元倉庫中的元數(shù)據(jù)進(jìn)行刪除,然后再進(jìn)行添加。元倉庫的更新流程如圖4所示。
圖4 元倉庫更新流程圖
為了更好地支持?jǐn)?shù)據(jù)信息的查詢,在元倉庫中的元數(shù)據(jù)上建立了用戶模式和語義元數(shù)據(jù),因此在元數(shù)據(jù)刪除的過程中要對其進(jìn)行判斷是否建立了映射關(guān)系,如果已經(jīng)建立了映射關(guān)系的則提示映射關(guān)系的建立者該元數(shù)據(jù)已經(jīng)不存在,然后再將元數(shù)據(jù)刪掉。
元數(shù)據(jù)之間存在若干依賴性(或稱相關(guān)性),它們制約著元數(shù)據(jù)提取與導(dǎo)入的先后順序:被依賴的元數(shù)據(jù)必須先于依賴的元數(shù)據(jù)進(jìn)行提取與導(dǎo)入。因此將要添加的元數(shù)據(jù)分成兩類:基本元數(shù)據(jù)和相關(guān)元數(shù)據(jù)。因此導(dǎo)入的時(shí)候需要分成兩步,第一步首先向平臺元數(shù)據(jù)庫導(dǎo)入基本元數(shù)據(jù),即各種實(shí)體類的對象,遍歷每種實(shí)體類的實(shí)體對象(實(shí)現(xiàn)時(shí)用鏈表管理),將其依次導(dǎo)入平臺元數(shù)據(jù)庫。第二階段待所有基本元數(shù)據(jù)導(dǎo)入完成后,便可以導(dǎo)入相關(guān)元數(shù)據(jù),即通過遍歷每種關(guān)聯(lián)類的關(guān)聯(lián)對象(實(shí)現(xiàn)時(shí)用關(guān)聯(lián)對象中的引用屬性管理)依次導(dǎo)入平臺元數(shù)據(jù)庫。這種導(dǎo)入順序確保了導(dǎo)入相關(guān)元數(shù)據(jù)時(shí)平臺元數(shù)據(jù)庫中已經(jīng)存放了該數(shù)據(jù)可能用到的基本元數(shù)據(jù),有效解決了元數(shù)據(jù)相關(guān)性問題。經(jīng)過以上過程,最終達(dá)到了元倉庫與源數(shù)據(jù)庫的元數(shù)據(jù)的同步。
3 結(jié) 語
本文給出了在當(dāng)源數(shù)據(jù)庫的結(jié)構(gòu)發(fā)生變化時(shí),如何對相應(yīng)的元倉庫中的元數(shù)據(jù)進(jìn)行更新的方法,并解決了因此種情況而引起的元數(shù)據(jù)懸掛的問題。課題組的最終目的是:通過本體標(biāo)注元數(shù)據(jù)和用戶模式的形式對各源數(shù)據(jù)信息進(jìn)行智能化的查詢。通過本體標(biāo)注元數(shù)據(jù)后,元倉庫發(fā)生變化時(shí),智能地解決本體標(biāo)注和用戶模式懸掛的問題也在考慮解決中,相關(guān)工作會(huì)在后續(xù)的文章中介紹。
參考文獻(xiàn)
[1]黎建輝,佘懷化,閻保平.基于元數(shù)據(jù)的關(guān)系數(shù)據(jù)庫語義集成方法[J].計(jì)算機(jī)工程,2008,34(6):54-56.
[2]林毅,寧洪,王挺,等.基于元數(shù)據(jù)的數(shù)據(jù)整合平臺的設(shè)計(jì)與研究[J].計(jì)算機(jī)應(yīng)用,2008(S2):69-71.
[3]劉文杰,寧洪,王挺,等.面向蛋白質(zhì)組學(xué)數(shù)據(jù)庫的元數(shù)據(jù)提取與導(dǎo)入工具[J].計(jì)算機(jī)工程與科學(xué),2009(23):40-42.
[4]OMG. Common warehouse metamodel specification version 1.0[R/OL]. [2003-04-01]. http://www.omg.org/docs.
[5]OMG. XML metadata interchange specification version 1.1[R/OL]. [2001-06-01]. http://www.omg.org/ cgi-bin.
[6]OMG. Meta Object Facility Specification version1.4. http://www.omg.org/docs/formal/00-04-03.pdf.
[7]郭超,寧洪,王挺,等.基于元數(shù)據(jù)的異構(gòu)生物數(shù)據(jù)源集成技術(shù)研究[C]//2008年中國高校通信類院系學(xué)術(shù)研討會(huì)論文集.北京:國防工業(yè)出版社,2008.
[8]丁建華,彭政,王飛.生物數(shù)據(jù)倉庫研究及應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2005,12(5):192-194.
[9]林毅,寧洪,王挺,等.基于本體的生物信息集成研究[C]//第五屆中國軟件工程大會(huì)論文集.北京:華北計(jì)算技術(shù)研究所,2008:16-18.
[10]蔣敏.基于網(wǎng)絡(luò)隔離的異構(gòu)數(shù)據(jù)庫同步技術(shù)的研究與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2005.
[11]沈敏,許華虎,季永華,等.基于XML的分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步系統(tǒng)的研究[J].計(jì)算機(jī)工程與應(yīng)用,2005(5):184-186.
[12]者敬.開放式異構(gòu)數(shù)據(jù)庫復(fù)制框架的研究與實(shí)現(xiàn)[D].北京:中國科學(xué)院軟件研究所,2002.
[13]楊正洪,鄭齊健,孫延輝.中文SQL Server 2000關(guān)系數(shù)據(jù)庫系統(tǒng)管理和開發(fā)指南[M].北京:機(jī)械工業(yè)出版社,2001.