數據庫系統互聯機制研究論文

時間:2022-09-03 09:00:00

導語:數據庫系統互聯機制研究論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

數據庫系統互聯機制研究論文

摘要:隨著企業規模的不斷擴大,各部門所需信息既相互交錯,又相對獨立。這就要求各部門所用的數據庫既能高度自治地工作,又能進行信息共享。本文主要介紹多dm3數據庫系統間的信息共享機制。不同dm3數據庫系統間的信息共享通過協調器實現。所有這些被協調器連接在一起的數據庫系統組成了一個聯邦數據庫。這樣既能較好地滿足企業的需要,也能在保證效率的前提下,提高數據的可用性。

關鍵詞:dbms復制聯邦數據庫

1.引言

隨著經濟的發展,企業的規模越來越大,其積累的信息也越來越多。存在著各部門所處理的信息多數只對本部門有效,僅有少數信息需給其它某些部門共享的問題。這種信息的分布性和獨立性要求對所處理的數據進行分類,使各部門既能獨立地處理本部門大多數數據,也使部門間能協調處理跨部門的事務。在這種情況下,對整個企業建立一個完全的緊密耦合的分布式數據庫是很困難的,也是沒必要的,特別是大型企業,這樣的數據庫的效率往往是很低的。

為解決這個問題,我們采用以下策略:每個部門使用一套緊密耦合的數據庫系統,而在存在跨部門事務處理的數據庫系統間用一個協調器聯起來。這樣就組成了一個橫跨整個企業,各部門高度自治的聯邦數據庫系統。

dm2是由華中理工大學數據庫多媒體技術研究所研制的數據庫管理系統。它采用客戶/服務器模型,客戶機與服務器,服務器與服務器均通過網絡互連,通過消息相互通訊,組成一個緊密耦合的分布式數據庫系統。它的工作流程如下:客戶機登錄到一臺服務器上,這臺服務器便成為它的服務器;它接收來自客戶機的消息,然后根據全局數據字典決定是自己獨立完成該操作,還是與其它服務器協作處理這條消息,處理完成之后,再由服務器將處理結果返回給客戶機。

而數據字典,作為記錄數據庫所有元數據的系統表,它向以上過程中提供各類有用的信息,引導它們向正確的方向運行,起著“指南針”的作用。它分為局部數據字典和全局數據字典。其中,局部數據字典用于記錄一個服務器站點中數據庫的控制信息,如表的模式,視圖的模式及各個數據區的的文件名等信息。全局數據字典用于記錄分布式數據庫系統中各個服務器站點上有關全局數據的控制信息,如服務器站點信息,各服務器站點的全局表名及表內碼記錄,各服務器站點上的全局數據視圖名及視圖內碼記錄,用戶名及口令記錄,用戶權限記錄等信息。各個局部數據字典可以各不相同,但為了保證在各個服務器上所看到的全局數據庫是一致的,因此,全局數據字典必須一致。我們所關心的是全局數據字典中的基表控制塊tv_ctrl_block,它的內容主要包括:全局基表總數,每個全局基表名和其對應的表內碼,該基表所在的服務器站點的編號等信息。它的功能是將各個服務器站點號與存儲在其上的表名及表內碼聯系起來。這樣,服務器從客戶消息中找到被處理的表名,然后通過查詢基表控制塊tv_ctrl_block,就能知道該表存在哪個服務器上,以便將相關消息發給該服務器。

由于dm2上各個服務器站點的全局字典完全相同,任何全局表的信息都會記入全局字典。若用它來構建一個企業的數據庫系統,則大量只對企業某部門有用的信息將會充斥在各部門所有服務器的全局字典中,增加了冗余。而且,當對全局表進行ddl操作時,為了確保全局字典的一致性,須對所有服務器的全局字典進行加鎖。dm2對全局字典的封鎖方式是采用令牌環方式,即令牌繞虛環(非實環)傳輸,某個服務器想對全局字典進行操作,必須等令牌到達該服務器才可以執行。每個部門建立的全局表絕大多數只對本部門有用,當對這些表進行ddl操作時,卻要對所有服務器的全局字典進行封鎖,通過令牌來實現對全局字典的互斥訪問。假如,兩個部門都要分別對本部門的內部表進行ddl操作,這應該是可以并行處理的操作,現在卻只能串行執行。而且,當服務器數目龐大時,每個服務器等待令牌的時間將會很長。這嚴重損害了數據庫的效率。

為彌補以上不足,在dm2的改進版本dm3中增加了協調器,用以聯接各個獨立的dm3數據庫子系統,并協調各子系統間的各種關系,使各子系統既能高度自治地工作,又能進行有效的信息共享。

2.體系結構

本系統可看作多個數據庫子系統被協調器聯起來的,高度自治的一個聯邦數據庫系統。其中,每個子系統獨立處理本系統內部的事務,而子系統間的信息共享由復制技術提供,副本間的一致性由協調器協調處理,處理所需的信息在初始化時寫入協調器的組間數據字典中。當對某子系統中的一份數據副本進行修改時,該子系統會將修改通知協調器,由協調器對該數據的其它副本進行修改,從而保證了所有副本的一致性。

由以上可知,子系統彼此并不直接接觸,而是各自都與協調器直接相聯,由協調器統一管理子系統間的通信。這樣,當子系統對副本進行修改時,不必關心相應的子系統處于何種狀態,也不必等待回應消息,以及異常處理,所有這些都由協調器進行管理。因此,既提高了系統運行的效率,也保證了子系統的獨立性。其體系結構如下圖所示。

協調器主要有三大功能,首先,它對協調器和服務器進行初始化,并將有關信息存入組間字典;其次,它管理不同子系統間的通信,維護副本的一致性;最后,它在子系統出現崩潰時,進行異常管理及恢復工作。

dm3多數據庫系統體系結構

3.主要策略

多個dm3系統間的信息共享是通過副本實現的,副本的一致性是由協調器來維持的,是一種弱一致性。通常,多數據庫系統間的一致性是通過協調器周期性地訪問服務器的日志來完成的。由于副本的更新帶有隨機性,因此,若采用這種方法,可能數據被修改多次,但其相對應的副本仍未被修改,這樣就損害了數據的一致性;也可能數據并未被修改,但協調器已多次訪問了服務器的日志了,這樣就降低了系統的效率。

所以,本系統采用的方法是當數據被修改時,由服務器通知協調器有關信息,再由協調器通知相關系統,修改相關數據。這樣,數據的修改及時(仍然是弱一致性),而協調器也不會在數據未被修改的情況下訪問服務器,提高了準確性。

為了使協調器正常工作,我們對底層數據庫管理系統dm2進行了修改。在基表控制塊tv_ctrl_block中增加一項isreplication。建表時,該項初始化為false;當為該表建立一個副本時,該項賦值為true。具體算法如下。

3.1初始化算法。

協調器:

從用戶或應用程序接收待連接的兩個系統中的服務器名,需復制的表名;

分別登錄到兩個系統的服務器上;

向存有待復制表的服務器發預復制消息;

等待服務器消息;

若失敗,發一條失敗的消息給服務器和用戶或應用程序,轉11);

若成功,從消息中取出待復制表的有關信息,根據這些信息,發一條建表消息給另一個系統的服務器;

等待服務器消息;

若失敗,發一條失敗的消息給服務器和用戶或應用程序,轉11);

若成功,調數據轉移程序,進行數據復制;

將有關信息寫入組間字典。

退出。

服務器:

當服務器收到預復制消息后,將基表控制塊tv_ctrl_block中的isreplication賦為true。同時,取出待復制表的有關信息,組成應答消息發給協調器。

當服務器收到失敗的消息后,將基表控制塊tv_ctrl_block中的isreplication賦為false。

3.2維護算法。

協調器:

從組間字典讀出相關信息,根據這些信息,登錄到相應系統上;

等待消息;

從某系統的服務器上收到一條修改消息后,通過查找組間字典,確定該消息的目的地,然后將它轉發過去;

若失敗,定時重發;

轉2);

服務器:

1)等待消息;

2)當收到某客戶或應用程序的消息后,檢查它是否是修改數據的操作(如delete,update或insert等);

若不是,轉7);

若是,檢查基表控制塊tv_ctrl_block中的isreplication是否為true;

若不是,轉7);

若是,向協調器發修改消息;

繼續執行服務器程序的其它部分。

3.3恢復算法。

若協調器所聯接的系統中有一個跨掉了,則對副本的修改無法及時地反映到跨掉的系統中來。這時,需要恢復算法來進行處理。

協調器:

當協調器發現有一個系統已經崩潰后,采取以下步驟。

將與該系統相關的變量open賦值為false;

打開記時器;

等待消息;

若收到的消息是其它系統發出的修改崩潰了的系統上的副本的命令,則依次將這些消息存儲起來,轉3);

若收到的消息是記時器發出的時間到的消息,則向崩潰的系統發登錄命令;

若登錄成功,將open的值改為true;

將存儲的消息依次發送過去,轉9);

若登錄失敗,轉3);

退出。

4.結論

我們曾在三個dm3數據庫系統上,用兩個協調器進行聯接。結果,運行情況良好,各副本最終都能保證一致,且各副本間存在差異的時間間隔很短。另外,在出現異常的情況下,協調器也能正常工作。

主要參考文獻

1.周龍驤等,分布式數據庫管理系統實現技術,科學出版社,1998。

2.鄭振楣,于戈,郭敏,分布式數據庫,科學出版社,1998。

3.王珊等,數據倉庫技術與聯機分析處理,科學出版社,1998。