多個DM3系統(tǒng)之間的信息共享
來源:投稿網(wǎng) 時間:
多數(shù)據(jù)庫系統(tǒng)是分布式數(shù)據(jù)庫系統(tǒng)的重要分支,是數(shù)據(jù)庫研究的新興領(lǐng)域。隨著企業(yè)規(guī)模的不斷擴(kuò)大,各部門所需的信息相互交錯、相對獨(dú)立。這就要求各部門使用的數(shù)據(jù)庫既能高度自治地工作,又能共享信息。
DM2.采用客戶/服務(wù)器模型、客戶機(jī)和服務(wù)器、服務(wù)器和服務(wù)器通過網(wǎng)絡(luò)連接,通過信息連接,形成緊密耦合的分布式數(shù)據(jù)庫系統(tǒng)。其工作流程如下:客戶機(jī)登錄到服務(wù)器,服務(wù)器成為代理服務(wù)器;接收客戶機(jī)的消息,然后根據(jù)全球數(shù)據(jù)字典決定是獨(dú)立完成操作,還是與其他服務(wù)器合作處理消息,然后由代理服務(wù)器返回客戶機(jī)。由于DM每個服務(wù)器站點(diǎn)的全局字典完全相同,任何全局表的信息都會記錄在全局字典中。如果用它來構(gòu)建企業(yè)的數(shù)據(jù)庫系統(tǒng),大量只對企業(yè)某個部門有用的信息將充斥在各個部門所有服務(wù)器的全球字典中,增加冗余。而且,當(dāng)全局表DDL操作時,為了保證全局字典的一致性,必須鎖定所有服務(wù)器的全局字典。DM2封鎖全局字典的方式是使用令牌環(huán),即令牌繞著虛環(huán)(非真實(shí)環(huán))傳輸。如果服務(wù)器想操作全局字典,它必須等到令牌到達(dá)服務(wù)器。各部門建立的大部分全局表只對本部門有用。DDL操作時,應(yīng)封鎖所有服務(wù)器的全局字典,并通過令牌訪問全局字典。這嚴(yán)重?fù)p害了數(shù)據(jù)庫的效率。
為彌補(bǔ)上述不足,在DM2的改進(jìn)版本DM3中增加了連接各獨(dú)立的協(xié)調(diào)器的協(xié)調(diào)器DM3.數(shù)據(jù)庫子系統(tǒng),協(xié)調(diào)各子系統(tǒng)之間的各種關(guān)系,使各子系統(tǒng)能夠高度自治地工作,又能有效地共享信息。
一.多數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)
該系統(tǒng)可以看作是一個高度自治的聯(lián)邦數(shù)據(jù)庫系統(tǒng),由多個數(shù)據(jù)庫子系統(tǒng)與協(xié)調(diào)器連接。其中,每個子系統(tǒng)獨(dú)立處理系統(tǒng)內(nèi)部事務(wù),子系統(tǒng)之間的信息共享由復(fù)制技術(shù)提供,副本之間的一致性由協(xié)調(diào)器協(xié)調(diào),所需的信息在初始化時寫入?yún)f(xié)調(diào)器的組間數(shù)據(jù)字典。當(dāng)修改子系統(tǒng)中的數(shù)據(jù)副本時,子系統(tǒng)將修改通知協(xié)調(diào)器修改數(shù)據(jù)的其他副本,以確保所有副本的一致性。
從上面可以看出,子系統(tǒng)并沒有直接接觸,而是直接與協(xié)調(diào)器連接,協(xié)調(diào)器統(tǒng)一管理子系統(tǒng)之間的通信。這樣,當(dāng)子系統(tǒng)修改副本時,就不必關(guān)心相應(yīng)的子系統(tǒng)處于什么狀態(tài),也不必等待回復(fù)消息和異常處理,所有這些都由協(xié)調(diào)器管理。因此,它不僅提高了系統(tǒng)的運(yùn)行效率,而且確保了子系統(tǒng)的獨(dú)立性。
協(xié)調(diào)器主要有三個功能。首先,它初始化協(xié)調(diào)器和服務(wù)器,并將相關(guān)信息存儲在組間字典中;其次,管理不同子系統(tǒng)之間的通信,維護(hù)副本的一致性;最后,當(dāng)子系統(tǒng)崩潰時,進(jìn)行異常管理和恢復(fù)。
二.多數(shù)據(jù)庫互聯(lián)機(jī)制的主要策略
多個DM3系統(tǒng)之間的信息共享是通過副本實(shí)現(xiàn)的,副本的一致性是由協(xié)調(diào)器維持的,這是一種弱一致性。通常,多數(shù)據(jù)庫系統(tǒng)之間的一致性是通過協(xié)調(diào)器定期訪問服務(wù)器日志來完成的。由于副本的更新是隨機(jī)的,如果使用這種方法,數(shù)據(jù)可能會被修改很多次,但相應(yīng)的副本仍然沒有被修改,這損害了數(shù)據(jù)的一致性;數(shù)據(jù)可能不會被修改,但協(xié)調(diào)器已經(jīng)多次訪問服務(wù)器日志,從而降低了系統(tǒng)的效率。
因此,當(dāng)數(shù)據(jù)被修改時,服務(wù)器通知協(xié)調(diào)器相關(guān)信息,然后協(xié)調(diào)器通知相關(guān)系統(tǒng)修改相關(guān)數(shù)據(jù)。這樣,數(shù)據(jù)修改及時(仍然是弱一致性),協(xié)調(diào)器不會訪問未修改的服務(wù)器,提高了準(zhǔn)確性。
為了使協(xié)調(diào)器正常工作,我們?yōu)榈讓訑?shù)據(jù)庫管理系統(tǒng)工作DM2進(jìn)行了修改。基表控制塊TV_CTRL_BLOCK中增加一項(xiàng)IsReplication。建表時,初始化為false;當(dāng)該表建立副本時,該賦值為true。具體算法如下。
1.初始化算法。
協(xié)調(diào)器:從用戶或應(yīng)用程序接收待連接的兩個系統(tǒng)中的服務(wù)器名稱,需要復(fù)制的表名;登錄到兩個系統(tǒng)的服務(wù)器上;向有待復(fù)制表的服務(wù)器發(fā)送預(yù)復(fù)制信息;等待服務(wù)器消息;如果失敗,向服務(wù)器、用戶或應(yīng)用程序發(fā)送失敗信息;如果成功,從消息中取出待復(fù)制表的相關(guān)信息,根據(jù)這些信息向另一個系統(tǒng)的服務(wù)器發(fā)送建設(shè)表消息;等待服務(wù)器消息;如果失敗,向服務(wù)器、用戶或應(yīng)用程序發(fā)送失敗信息;如果成功,調(diào)整數(shù)據(jù)轉(zhuǎn)移程序,復(fù)制數(shù)據(jù);將相關(guān)信息寫入字典并退出。
服務(wù)器:當(dāng)服務(wù)器收到預(yù)復(fù)制消息時,基表控制塊TV_CTRL_BLOCK中的IsReplication賦為true。同時,取出待復(fù)制表的相關(guān)信息,形成應(yīng)答信息發(fā)送給協(xié)調(diào)器。
當(dāng)服務(wù)器收到失敗的消息時,基表控制塊TV_CTRL_BLOCK中的IsReplication賦為false。
2.維護(hù)算法。
協(xié)調(diào)器:從組間字典讀取相關(guān)信息,登錄相應(yīng)系統(tǒng);等待消息;從系統(tǒng)服務(wù)器上收到修改消息后,確定消息的目的地,然后轉(zhuǎn)發(fā);如果失敗,定期重新發(fā)送。
服務(wù)器:1)等待消息;2)收到客戶或應(yīng)用程序的消息后,檢查是否修改數(shù)據(jù)(如delete,update或insert等);如果是,檢查基表控制塊TV_CTRL_BLOCK中的IsReplication是否為true;向協(xié)調(diào)器發(fā)送修改信息;繼續(xù)執(zhí)行服務(wù)器程序的其他部分。
3.恢復(fù)算法。
如果協(xié)調(diào)器連接的系統(tǒng)中有一個交叉,則副本的修改不能及時反映在交叉系統(tǒng)中。此時,需要恢復(fù)算法進(jìn)行處理。
協(xié)調(diào)器:當(dāng)協(xié)調(diào)器發(fā)現(xiàn)一個系統(tǒng)已經(jīng)崩潰時,采取以下步驟。
與系統(tǒng)相關(guān)的變量open賦值為false;打開記時器;等待消息;如果收到的消息是其他系統(tǒng)修改崩潰系統(tǒng)副本的命令,則依次存儲;如果收到的消息是記時器發(fā)送的時間消息,則向崩潰系統(tǒng)發(fā)送登錄命令;如果登錄成功,open的值改為true;依次發(fā)送存儲信息;如果登錄失敗,請退出。
我們曾經(jīng)在三個DM在3個數(shù)據(jù)庫系統(tǒng)中,使用兩個協(xié)調(diào)器連接。因此,運(yùn)行良好,每個副本最終可以保證一致,每個副本之間的時間間隔很短。此外,協(xié)調(diào)器也可以在異常情況下正常工作。