- 相關(guān)推薦
多數(shù)據(jù)庫(kù)系統(tǒng)互聯(lián)機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)
摘要:隨著企業(yè)規(guī)模的不斷擴(kuò)大,各部門(mén)所需信息既相互交錯(cuò),又相對(duì)獨(dú)立。這就要求各部門(mén)所用的數(shù)據(jù)庫(kù)既能高度自治地工作,又能進(jìn)行信息共享。本文主要介紹多DM3數(shù)據(jù)庫(kù)系統(tǒng)間的信息共享機(jī)制。 不同DM3數(shù)據(jù)庫(kù)系統(tǒng)間的信息共享通過(guò)協(xié)調(diào)器實(shí)現(xiàn)。所有這些被協(xié)調(diào)器連接在一起的數(shù)據(jù)庫(kù)系統(tǒng)組成了一個(gè)聯(lián)邦數(shù)據(jù)庫(kù)。這樣既能較好地滿(mǎn)足企業(yè)的需要,也能在保證效率的前提下,提高數(shù)據(jù)的可用性。
關(guān)鍵詞: DBMS 復(fù)制 聯(lián)邦數(shù)據(jù)庫(kù)
1.引言
隨著經(jīng)濟(jì)的發(fā)展,企業(yè)的規(guī)模越來(lái)越大,其積累的信息也越來(lái)越多。存在著各部門(mén)所處理的信息多數(shù)只對(duì)本部門(mén)有效,僅有少數(shù)信息需給其它某些部門(mén)共享的問(wèn)題。這種信息的分布性和獨(dú)立性要求對(duì)所處理的數(shù)據(jù)進(jìn)行分類(lèi),使各部門(mén)既能獨(dú)立地處理本部門(mén)大多數(shù)數(shù)據(jù),也使部門(mén)間能協(xié)調(diào)處理跨部門(mén)的事務(wù)。在這種情況下,對(duì)整個(gè)企業(yè)建立一個(gè)完全的緊密耦合的分布式數(shù)據(jù)庫(kù)是很困難的,也是沒(méi)必要的,特別是大型企業(yè),這樣的數(shù)據(jù)庫(kù)的效率往往是很低的。
為解決這個(gè)問(wèn)題,我們采用以下策略:每個(gè)部門(mén)使用一套緊密耦合的數(shù)據(jù)庫(kù)系統(tǒng),而在存在跨部門(mén)事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)間用一個(gè)協(xié)調(diào)器聯(lián)起來(lái)。這樣就組成了一個(gè)橫跨整個(gè)企業(yè),各部門(mén)高度自治的聯(lián)邦數(shù)據(jù)庫(kù)系統(tǒng)。
DM2是由華中理工大學(xué)數(shù)據(jù)庫(kù)多媒體技術(shù)研究所研制的數(shù)據(jù)庫(kù)管理系統(tǒng)。它采用客戶(hù)/服務(wù)器模型,客戶(hù)機(jī)與服務(wù)器,服務(wù)器與服務(wù)器均通過(guò)網(wǎng)絡(luò)互連,通過(guò)消息相互通訊,組成一個(gè)緊密耦合的分布式數(shù)據(jù)庫(kù)系統(tǒng)。它的工作流程如下:客戶(hù)機(jī)登錄到一臺(tái)服務(wù)器上,這臺(tái)服務(wù)器便成為它的代理服務(wù)器;它接收來(lái)自客戶(hù)機(jī)的消息,然后根據(jù)全局?jǐn)?shù)據(jù)字典決定是自己獨(dú)立完成該操作,還是與其它服務(wù)器協(xié)作處理這條消息,處理完成之后,再由代理服務(wù)器將處理結(jié)果返回給客戶(hù)機(jī)。
而數(shù)據(jù)字典,作為記錄數(shù)據(jù)庫(kù)所有元數(shù)據(jù)的系統(tǒng)表,它向以上過(guò)程中提供各類(lèi)有用的信息,引導(dǎo)它們向正確的方向運(yùn)行,起著“指南針”的作用。它分為局部數(shù)據(jù)字典和全局?jǐn)?shù)據(jù)字典。其中,局部數(shù)據(jù)字典用于記錄一個(gè)服務(wù)器站點(diǎn)中數(shù)據(jù)庫(kù)的控制信息,如表的模式,視圖的模式及各個(gè)數(shù)據(jù)區(qū)的的文件名等信息。全局?jǐn)?shù)據(jù)字典用于記錄分布式數(shù)據(jù)庫(kù)系統(tǒng)中各個(gè)服務(wù)器站點(diǎn)上有關(guān)全局?jǐn)?shù)據(jù)的控制信息,如服務(wù)器站點(diǎn)信息,各服務(wù)器站點(diǎn)的全局表名及表內(nèi)碼記錄,各服務(wù)器站點(diǎn)上的全局?jǐn)?shù)據(jù)視圖名及視圖內(nèi)碼記錄,用戶(hù)名及口令記錄,用戶(hù)權(quán)限記錄等信息。各個(gè)局部數(shù)據(jù)字典可以各不相同,但為了保證在各個(gè)服務(wù)器上所看到的全局?jǐn)?shù)據(jù)庫(kù)是一致的,因此,全局?jǐn)?shù)據(jù)字典必須一致。我們所關(guān)心的是全局?jǐn)?shù)據(jù)字典中的基表控制塊TV_CTRL_BLOCK,它的內(nèi)容主要包括:全局基表總數(shù),每個(gè)全局基表名和其對(duì)應(yīng)的表內(nèi)碼,該基表所在的服務(wù)器站點(diǎn)的編號(hào)等信息。它的功能是將各個(gè)服務(wù)器站點(diǎn)號(hào)與存儲(chǔ)在其上的表名及表內(nèi)碼聯(lián)系起來(lái)。這樣,代理服務(wù)器從客戶(hù)消息中找到被處理的表名,然后通過(guò)查詢(xún)基表控制塊TV_CTRL_BLOCK,就能知道該表存在哪個(gè)服務(wù)器上,以便將相關(guān)消息發(fā)給該服務(wù)器。
由于DM2上各個(gè)服務(wù)器站點(diǎn)的全局字典完全相同,任何全局表的信息都會(huì)記入全局字典。若用它來(lái)構(gòu)建一個(gè)企業(yè)的數(shù)據(jù)庫(kù)系統(tǒng),則大量只對(duì)企業(yè)某部門(mén)有用的信息將會(huì)充斥在各部門(mén)所有服務(wù)器的全局字典中,增加了冗余。而且,當(dāng)對(duì)全局表進(jìn)行DDL操作時(shí),為了確保全局字典的一致性,須對(duì)所有服務(wù)器的全局字典進(jìn)行加鎖。DM2對(duì)全局字典的封鎖方式是采用令牌環(huán)方式,即令牌繞虛環(huán)(非實(shí)環(huán))傳輸,某個(gè)服務(wù)器想對(duì)全局字典進(jìn)行操作,必須等令牌到達(dá)該服務(wù)器才可以執(zhí)行。每個(gè)部門(mén)建立的全局表絕大多數(shù)只對(duì)本部門(mén)有用,當(dāng)對(duì)這些表進(jìn)行DDL操作時(shí),卻要對(duì)所有服務(wù)器的全局字典進(jìn)行封鎖,通過(guò)令牌來(lái)實(shí)現(xiàn)對(duì)全局字典的互斥訪(fǎng)問(wèn)。假如,兩個(gè)部門(mén)都要分別對(duì)本部門(mén)的內(nèi)部表進(jìn)行DDL操作,這應(yīng)該是可以并行處理的操作,現(xiàn)在卻只能串行執(zhí)行。而且,當(dāng)服務(wù)器數(shù)目龐大時(shí),每個(gè)服務(wù)器等待令牌的時(shí)間將會(huì)很長(zhǎng)。這嚴(yán)重?fù)p害了數(shù)據(jù)庫(kù)的效率。
為彌補(bǔ)以上不足,在DM2的改進(jìn)版本DM3中增加了協(xié)調(diào)器,用以聯(lián)接各個(gè)獨(dú)立的DM3數(shù)據(jù)庫(kù)子系統(tǒng),并協(xié)調(diào)各子系統(tǒng)間的各種關(guān)系,使各子系統(tǒng)既能高度自治地工作,又能進(jìn)行有效的信息共享。
2.體系結(jié)構(gòu)
本系統(tǒng)可看作多個(gè)數(shù)據(jù)庫(kù)子系統(tǒng)被協(xié)調(diào)器聯(lián)起來(lái)的,高度自治的一個(gè)聯(lián)邦數(shù)據(jù)庫(kù)系統(tǒng)。其中,每個(gè)子系統(tǒng)獨(dú)立處理本系統(tǒng)內(nèi)部的事務(wù),而子系統(tǒng)間的信息共享由復(fù)制技術(shù)提供,副本間的一致性由協(xié)調(diào)器協(xié)調(diào)處理,處理所需的信息在初始化時(shí)寫(xiě)入?yún)f(xié)調(diào)器的組間數(shù)據(jù)字典中。當(dāng)對(duì)某子系統(tǒng)中的一份數(shù)據(jù)副本進(jìn)行修改時(shí),該子系統(tǒng)會(huì)將修改通知協(xié)調(diào)器,由協(xié)調(diào)器對(duì)該數(shù)據(jù)的其它副本進(jìn)行修改,從而保證了所有副本的一致性。
由以上可知,子系統(tǒng)彼此并不直接接觸,而是各自都與協(xié)調(diào)器直接相聯(lián),由協(xié)調(diào)器統(tǒng)一管理子系統(tǒng)間的通信。這樣,當(dāng)子系統(tǒng)對(duì)副本進(jìn)行修改時(shí),不必關(guān)心相應(yīng)的子系統(tǒng)處于何種狀態(tài),也不必等待回應(yīng)消息,以及異常處理,所有這些都由協(xié)調(diào)器進(jìn)行管理。因此,既提高了系統(tǒng)運(yùn)行的效率,也保證了子系統(tǒng)的獨(dú)立性。其體系結(jié)構(gòu)如下圖所示。
協(xié)調(diào)器主要有三大功能,首先,它對(duì)協(xié)調(diào)器和服務(wù)器進(jìn)行初始化,并將有關(guān)信息存入組間字典;其次,它管理不同子系統(tǒng)間的通信,維護(hù)副本的一致性;最后,它在子系統(tǒng)出現(xiàn)崩潰時(shí),進(jìn)行異常管理及恢復(fù)工作。
圖1 DM3多數(shù)據(jù)庫(kù)系統(tǒng)體系結(jié)構(gòu)
3.主要策略
多個(gè)DM3系統(tǒng)間的信息共享是通過(guò)副本實(shí)現(xiàn)的,副本的一致性是由協(xié)調(diào)器來(lái)維持的,是一種弱一致性。通常,多數(shù)據(jù)庫(kù)系統(tǒng)間的一致性是通過(guò)協(xié)調(diào)器周期性地訪(fǎng)問(wèn)服務(wù)器的日志來(lái)完成的。由于副本的更新帶有隨機(jī)性,因此,若采用這種方法,可能數(shù)據(jù)被修改多次,但其相對(duì)應(yīng)的副本仍未被修改,這樣就損害了數(shù)據(jù)的一致性;也可能數(shù)據(jù)并未被修改,但協(xié)調(diào)器已多次訪(fǎng)問(wèn)了服務(wù)器的日志了,這樣就降低了系統(tǒng)的效率。
所以,本系統(tǒng)采用的方法是當(dāng)數(shù)據(jù)被修改時(shí),由服務(wù)器通知協(xié)調(diào)器有關(guān)信息,再由協(xié)調(diào)器通知相關(guān)系統(tǒng),修改相關(guān)數(shù)據(jù)。這樣,數(shù)據(jù)的修改及時(shí)(仍然是弱一致性),而協(xié)調(diào)器也不會(huì)在數(shù)據(jù)未被修改的情況下訪(fǎng)問(wèn)服務(wù)器,提高了準(zhǔn)確性。
為了使協(xié)調(diào)器正常工作,我們對(duì)底層數(shù)據(jù)庫(kù)管理系統(tǒng)DM2進(jìn)行了修改。在基表控制塊TV_CTRL_BLOCK中增加一項(xiàng)IsReplication.建表時(shí),該項(xiàng)初始化為false;當(dāng)為該表建立一個(gè)副本時(shí),該項(xiàng)賦值為true.具體算法如下。
3.1初始化算法。
協(xié)調(diào)器:
從用戶(hù)或應(yīng)用程序接收待連接的兩個(gè)系統(tǒng)中的服務(wù)器名,需復(fù)制的表名;
分別登錄到兩個(gè)系統(tǒng)的服務(wù)器上;
向存有待復(fù)制表的服務(wù)器發(fā)預(yù)復(fù)制消息;
等待服務(wù)器消息;
若失敗,發(fā)一條失敗的消息給服務(wù)器和用戶(hù)或應(yīng)用程序,轉(zhuǎn)11);
若成功,從消息中取出待復(fù)制表的有關(guān)信息,根據(jù)這些信息,發(fā)一條建表消息給另一個(gè)系統(tǒng)的服務(wù)器;
等待服務(wù)器消息;
若失敗,發(fā)一條失敗的消息給服務(wù)器和用戶(hù)或應(yīng)用程序,轉(zhuǎn)11);
若成功,調(diào)數(shù)據(jù)轉(zhuǎn)移程序,進(jìn)行數(shù)據(jù)復(fù)制;
將有關(guān)信息寫(xiě)入組間字典。
退出。
服務(wù)器:
當(dāng)服務(wù)器收到預(yù)復(fù)制消息后,將基表控制塊TV_CTRL_BLOCK中的IsReplication賦為true.同時(shí),取出待復(fù)制表的有關(guān)信息,組成應(yīng)答消息發(fā)給協(xié)調(diào)器。
當(dāng)服務(wù)器收到失敗的消息后,將基表控制塊TV_CTRL_BLOCK中的IsReplication賦為false.
3.2維護(hù)算法。
協(xié)調(diào)器:
從組間字典讀出相關(guān)信息,根據(jù)這些信息,登錄到相應(yīng)系統(tǒng)上;
等待消息;
從某系統(tǒng)的服務(wù)器上收到一條修改消息后,通過(guò)查找組間字典,確定該消息的目的地,然后將它轉(zhuǎn)發(fā)過(guò)去;
若失敗,定時(shí)重發(fā);
轉(zhuǎn)2);
服務(wù)器:
1)等待消息;
2)當(dāng)收到某客戶(hù)或應(yīng)用程序的消息后,檢查它是否是修改數(shù)據(jù)的操作(如delete,update或insert等);
若不是,轉(zhuǎn)7);
若是,檢查基表控制塊TV_CTRL_BLOCK中的IsReplication是否為true;
若不是,轉(zhuǎn)7);
若是,向協(xié)調(diào)器發(fā)修改消息;
繼續(xù)執(zhí)行服務(wù)器程序的其它部分。
3.3恢復(fù)算法。
若協(xié)調(diào)器所聯(lián)接的系統(tǒng)中有一個(gè)跨掉了,則對(duì)副本的修改無(wú)法及時(shí)地反映到跨掉的系統(tǒng)中來(lái)。這時(shí),需要恢復(fù)算法來(lái)進(jìn)行處理。
協(xié)調(diào)器:
當(dāng)協(xié)調(diào)器發(fā)現(xiàn)有一個(gè)系統(tǒng)已經(jīng)崩潰后,采取以下步驟。
將與該系統(tǒng)相關(guān)的變量open賦值為false;
打開(kāi)記時(shí)器;
等待消息;
若收到的消息是其它系統(tǒng)發(fā)出的修改崩潰了的系統(tǒng)上的副本的命令,則依次將這些消息存儲(chǔ)起來(lái),轉(zhuǎn)3);
若收到的消息是記時(shí)器發(fā)出的時(shí)間到的消息,則向崩潰的系統(tǒng)發(fā)登錄命令;
若登錄成功,將open的值改為true;
將存儲(chǔ)的消息依次發(fā)送過(guò)去,轉(zhuǎn)9);
若登錄失敗,轉(zhuǎn)3);
退出。
4.結(jié)論
我們?cè)谌齻(gè)DM3數(shù)據(jù)庫(kù)系統(tǒng)上,用兩個(gè)協(xié)調(diào)器進(jìn)行聯(lián)接。結(jié)果,運(yùn)行情況良好,各副本最終都能保證一致,且各副本間存在差異的時(shí)間間隔很短。另外,在出現(xiàn)異常的情況下,協(xié)調(diào)器也能正常工作。
主要參考文獻(xiàn)
周龍?bào)J等,分布式數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)現(xiàn)技術(shù),科學(xué)出版社,1998.
鄭振楣,于戈,郭敏,分布式數(shù)據(jù)庫(kù),科學(xué)出版社,1998.
王珊等,數(shù)據(jù)倉(cāng)庫(kù)技術(shù)與聯(lián)機(jī)分析處理,科學(xué)出版社,1998.
【多數(shù)據(jù)庫(kù)系統(tǒng)互聯(lián)機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)】相關(guān)文章:
一種新型的流媒體系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_反饋機(jī)制08-18
在C 中實(shí)現(xiàn)JAVA的存儲(chǔ)管理機(jī)制08-09
讓學(xué)生多設(shè)計(jì)08-17
“少教多學(xué)”:實(shí)現(xiàn)從傳統(tǒng)走向現(xiàn)代的新轉(zhuǎn)變08-16
地方文獻(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)08-09
基于Client/Server 的課件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)04-12
人生價(jià)值的實(shí)現(xiàn) 教學(xué)設(shè)計(jì)示例08-17
廣播節(jié)目分頻播出系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)08-17