摘 要: 通過(guò)分析數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)中并發(fā)控制導(dǎo)致的數(shù)據(jù)的不一致性,提出了解決并發(fā)控制的動(dòng)態(tài)加鎖粒度的兩段鎖協(xié)議。
關(guān)鍵詞: 數(shù)據(jù)倉(cāng)庫(kù) 視圖 加鎖粒度 并發(fā)控制
1 數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的體系結(jié)構(gòu)
數(shù)據(jù)倉(cāng)庫(kù)是面向主題的、集成的、隨時(shí)間而變的、持久的數(shù)據(jù)集合,用于支持管理決策過(guò)程。
數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的體系結(jié)構(gòu)如圖1所示。

(1)信息源??梢允莻鹘y(tǒng)數(shù)據(jù)庫(kù),也可以是文件、HTML文件和知識(shí)庫(kù)等。
(2)包裝器。包裝工作包括對(duì)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型進(jìn)行統(tǒng)一的轉(zhuǎn)換,必要時(shí)還需對(duì)數(shù)據(jù)之間的語(yǔ)義聯(lián)系進(jìn)行重新構(gòu)造。
(3)監(jiān)控器。監(jiān)控器用來(lái)建立數(shù)據(jù)的各種概要文件,負(fù)責(zé)監(jiān)控?cái)?shù)據(jù)庫(kù)中所有表的目錄、表的內(nèi)容以及數(shù)據(jù)倉(cāng)庫(kù)與信息源之間的數(shù)據(jù)增量,并報(bào)告給上層的集成器。
(4)集成器。集成器不僅負(fù)責(zé)數(shù)據(jù)倉(cāng)庫(kù)初始化,還負(fù)責(zé)接收監(jiān)控器的變化報(bào)告,并將信息源的新變化根據(jù)有關(guān)定義轉(zhuǎn)化到數(shù)據(jù)倉(cāng)庫(kù)中。
(5)實(shí)現(xiàn)圖管理部件。負(fù)責(zé)數(shù)據(jù)共享、安全保密、歸檔、備份、恢復(fù)及元數(shù)據(jù)的管理工作。
(6)查詢與分析工具。完成決策問(wèn)題所需的各種查詢與分析工具,包括用戶查詢工具、C/S工具、用于多維數(shù)據(jù)的OLAP分析工具、數(shù)據(jù)挖掘(DM)工具等,以實(shí)現(xiàn)決策支持系統(tǒng)的各種要求。
在數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)中,信息源采集數(shù)據(jù),監(jiān)控器管理信息源數(shù)據(jù)的增量,包裝器對(duì)需要加載的數(shù)據(jù)進(jìn)行統(tǒng)一的轉(zhuǎn)換后觸發(fā)事件,從而引起集成器來(lái)加載和集成數(shù)據(jù),然后存放于數(shù)據(jù)倉(cāng)庫(kù)中。各種查詢與分析工具通過(guò)實(shí)現(xiàn)圖管理部件來(lái)訪問(wèn)數(shù)據(jù)倉(cāng)庫(kù)。
2 多重粒度的數(shù)據(jù)一致性
在數(shù)據(jù)倉(cāng)庫(kù)中,數(shù)據(jù)量是巨大的。有時(shí)數(shù)據(jù)的內(nèi)容經(jīng)常發(fā)生變化,而且不要求特別詳細(xì)的歷史記錄,這時(shí)通過(guò)使用簡(jiǎn)要記錄來(lái)構(gòu)成綜合級(jí)數(shù)據(jù)粒度。簡(jiǎn)要記錄是把操作型數(shù)據(jù)中的許多不同的、詳細(xì)的記錄組合在一起形成一條記錄。一條簡(jiǎn)要記錄以聚集的形成代表了許多條操作型記錄。建立簡(jiǎn)要記錄就是為最終用戶的訪問(wèn)和分析提供一種緊湊的、方便的數(shù)據(jù)組織形式。另外,數(shù)據(jù)倉(cāng)庫(kù)在其內(nèi)部都以一種稱為快照的數(shù)據(jù)結(jié)構(gòu)為中心來(lái)組織。快照是因?yàn)橐患录陌l(fā)生而引起的。例如,操作型環(huán)境中的一些活動(dòng)需要記錄下來(lái)或者用時(shí)間來(lái)引發(fā),則實(shí)際發(fā)生的活動(dòng)與被置入數(shù)據(jù)倉(cāng)庫(kù)中的快照數(shù)目是一一對(duì)應(yīng)的,這樣數(shù)據(jù)倉(cāng)庫(kù)就能追蹤所有的歷史活動(dòng)??煺沾砹艘粋€(gè)單一的事件,構(gòu)成了數(shù)據(jù)倉(cāng)庫(kù)的細(xì)節(jié)級(jí)粒度。
快照和簡(jiǎn)要記錄構(gòu)成了數(shù)據(jù)倉(cāng)庫(kù)中的視圖。視圖的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中,稱數(shù)據(jù)倉(cāng)庫(kù)視圖為實(shí)例化視圖。實(shí)例化視圖一般沒(méi)有自動(dòng)更新的功能,但事實(shí)上,當(dāng)信息源數(shù)據(jù)發(fā)生變化后,經(jīng)過(guò)集成器的處理會(huì)引起數(shù)據(jù)倉(cāng)庫(kù)的相應(yīng)變化。這時(shí)帶來(lái)了一些問(wèn)題:首先,某個(gè)信息源產(chǎn)生了數(shù)據(jù)倉(cāng)庫(kù)的幾個(gè)視圖,而這幾個(gè)視圖之間相互關(guān)聯(lián);其次,信息源的分布性使得視圖的更新可能并發(fā)出現(xiàn),這時(shí)必須有合適的并發(fā)控制策略保證視圖數(shù)據(jù)與信息源數(shù)據(jù)之間的一致性。
下面介紹通過(guò)一種鎖管理機(jī)制的并發(fā)控制策略來(lái)保證視圖數(shù)據(jù)與信息源數(shù)據(jù)之間一致性的方法。
3 數(shù)據(jù)倉(cāng)庫(kù)的鎖管理機(jī)制
為保證數(shù)據(jù)一致性所使用的并發(fā)控制算法中最著名的是兩段鎖協(xié)議(2PL協(xié)議)。其主要內(nèi)容是并發(fā)執(zhí)行的多個(gè)事務(wù)對(duì)數(shù)據(jù)進(jìn)行操作以前要進(jìn)行加鎖,且每個(gè)事務(wù)中的所有加鎖操作在第一個(gè)解鎖操作以前執(zhí)行。由于數(shù)據(jù)倉(cāng)庫(kù)與傳統(tǒng)數(shù)據(jù)庫(kù)存在很大的差異,故2PL協(xié)議必須加以改進(jìn),以適應(yīng)數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)。
3.1 鎖模式
在數(shù)據(jù)倉(cāng)庫(kù)中對(duì)資源對(duì)象加鎖時(shí),通過(guò)對(duì)鎖的區(qū)分來(lái)實(shí)現(xiàn)可串行化調(diào)度。鎖可分為:
(1)共享鎖:即Shared(S)。共享鎖用于只讀操作,它允許多個(gè)并發(fā)事務(wù)讀取所鎖定的資源,但禁止其他事務(wù)對(duì)鎖定資源的修改操作。
(2)排它鎖:即Exclusive(X)。用于數(shù)據(jù)修改操作,排它鎖所鎖定的資源不能被其他并發(fā)事務(wù)讀取或修改。
以上二種鎖模式在試圖鎖定資源時(shí)存在兼容性問(wèn)題,即在使用一種鎖模式鎖定資源期間是否允許其他事務(wù)再鎖定該資源。例如,共享鎖與共享鎖兼容,就是指一個(gè)事務(wù)用共享鎖鎖定某一資源后,允許其他事務(wù)再在該資源上放置共享鎖,使它們能夠并發(fā)讀取該資源;而排它鎖與任何的鎖都不兼容,是指一個(gè)事務(wù)用排它鎖鎖定某一資源期間,不允許另外一個(gè)事務(wù)在該資源上加鎖。
3.2 動(dòng)態(tài)加鎖粒度的兩段鎖協(xié)議
數(shù)據(jù)倉(cāng)庫(kù)中的信息源是分布式的,對(duì)各個(gè)信息源需劃分為不同的子事務(wù)來(lái)執(zhí)行,同時(shí)對(duì)數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)及信息源的數(shù)據(jù)加鎖。故數(shù)據(jù)倉(cāng)庫(kù)要遵循2PL協(xié)議,其各個(gè)信息源也要遵循2PL協(xié)議。
2PL協(xié)議可以簡(jiǎn)單歸納如下:對(duì)于若干個(gè)事務(wù)T1,T2,……Tn在m個(gè)信息源上執(zhí)行,其集成器中的全局調(diào)度E可以由一組局部調(diào)度序列S1,S2,……,Sn來(lái)描述,每一個(gè)局部調(diào)度均遵守2PL協(xié)議,且對(duì)于有沖突操作事務(wù)Ti、Tj的沖突操作Oi、Oj,有Ti<Tj,則Oi<Oj。則全局調(diào)度E滿足2PL協(xié)議,即是可串行化的。
在2PL協(xié)議中,其加鎖機(jī)制由最基本的讀鎖和寫(xiě)鎖構(gòu)成,其相容性前面已給出。由此可知,只要出現(xiàn)寫(xiě)操作就會(huì)出現(xiàn)沖突操作。但在很多情況下,對(duì)于讀寫(xiě)沖突、寫(xiě)寫(xiě)沖突等,只要降低其加鎖粒度,就可以化解該沖突操作。
假設(shè)數(shù)據(jù)庫(kù)DB={Tab1,Tab2,Tab3,Tab4}。Tab1與Tab2是相關(guān)聯(lián)的表,Tab3與Tab4也是相關(guān)聯(lián)的表,但二者之間是相對(duì)獨(dú)立的,即它們之間沒(méi)有共同的屬性。據(jù)此,數(shù)據(jù)庫(kù)DB可分為{Tab1,Tab2},{Tab3,Tab4}。有二個(gè)事務(wù)T1和T2,它們都將對(duì)DB進(jìn)行寫(xiě)操作,其操作時(shí)序如圖2所示。

當(dāng)在2PL協(xié)議中的加鎖粒度為數(shù)據(jù)庫(kù)DB時(shí),則T2在t2時(shí)刻的寫(xiě)操作就要等到t3時(shí)刻以后了。因?yàn)門(mén)1必須等到t3時(shí)刻完成對(duì)Tab2的操作后才能釋放對(duì)DB的鎖。但如果把加鎖層次降為DB中的表,則T1、T2就可在t1、t2時(shí)刻分別獲得對(duì)Tab1、Tab3的鎖,即T2就可在t2時(shí)刻完成寫(xiě)操作。這樣顯然并發(fā)度將有所提高,故在此引入動(dòng)態(tài)加鎖粒度的兩段鎖協(xié)議。
3.3 加鎖粒度
被加鎖的數(shù)據(jù)對(duì)象的大小,即為加鎖粒度。適當(dāng)選定加鎖粒度是非常重要的。加鎖粒度越細(xì),加鎖次數(shù)將會(huì)增多,系統(tǒng)開(kāi)銷就會(huì)越大,但這樣可減少?zèng)_突事務(wù),使整個(gè)數(shù)據(jù)倉(cāng)庫(kù)的并發(fā)程度提高;加鎖粒度越大,加鎖的次數(shù)將會(huì)減小,系統(tǒng)開(kāi)銷隨之減少,但并發(fā)度也會(huì)降低。所以加鎖粒度的大小要根據(jù)實(shí)際情況決定。如果對(duì)信息源數(shù)據(jù)的集成進(jìn)行大方面的加載,則采用較粗的加鎖粒度;如果只是少量的讀取,如只對(duì)某些記錄和某些字段,則可采用較細(xì)的加鎖粒度。下面用一種動(dòng)態(tài)加鎖粒度的機(jī)制來(lái)解決數(shù)據(jù)集成和加載時(shí)的并發(fā)控制。先介紹幾個(gè)定義。
(1)加鎖粒度級(jí)別:數(shù)據(jù)的加鎖層次。由于在數(shù)據(jù)倉(cāng)庫(kù)中有多種不同的數(shù)據(jù)對(duì)象(如信息源可以是數(shù)據(jù)庫(kù)、知識(shí)庫(kù)等),并且數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)也具有多重粒度,所以就有不同的加鎖粒度級(jí)別。在數(shù)據(jù)庫(kù)中可能的加鎖粒度有:整個(gè)數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)的一個(gè)表空間(儲(chǔ)存一個(gè)或多個(gè)表的一個(gè)邏輯存取空間)、表空間的一個(gè)表、一個(gè)表中的一條記錄或一個(gè)表中的一個(gè)字段。在數(shù)據(jù)倉(cāng)庫(kù)中,數(shù)據(jù)是按主題來(lái)劃分的,主題中包含視圖。由此可見(jiàn),不同環(huán)境中數(shù)據(jù)層次不同。因此不能把一個(gè)加鎖粒度級(jí)別用在數(shù)據(jù)倉(cāng)庫(kù)中的所有地方,各個(gè)信息源以及數(shù)據(jù)倉(cāng)庫(kù)應(yīng)有自己的加鎖粒度級(jí)別。并且加鎖粒度級(jí)別是一個(gè)偏序關(guān)系,即數(shù)據(jù)層次是有大小的。
(2)加鎖粒度集:加鎖數(shù)據(jù)對(duì)象在某一加鎖粒度級(jí)別的集合。
(3)最小加鎖粒度集:加鎖數(shù)據(jù)對(duì)象在某一加鎖粒度級(jí)別中最小級(jí)別的集合。
(4)事務(wù)等待隊(duì)列:用于放置相沖突的事務(wù)。
假定Ti和Tj是一對(duì)加鎖沖突事務(wù),Ti是對(duì)數(shù)據(jù)對(duì)象DB的加鎖請(qǐng)求者,而Tj是該數(shù)據(jù)對(duì)象的鎖持有者。Min-Gran(Ti)、Min-Gran(Tj)分別為T(mén)i、Tj對(duì)數(shù)據(jù)對(duì)象DB的最小加鎖粒度集。Lock-Gran(Ti)、Lock-Gran(Tj)分別為T(mén)i、Tj加鎖粒度級(jí)別。Gran(Ti)、Gran(Tj)分別為T(mén)i、Tj對(duì)數(shù)據(jù)對(duì)象DB的加鎖粒度集。
動(dòng)態(tài)加鎖粒度運(yùn)行機(jī)制的基本思想是:首先對(duì)將要運(yùn)行的事務(wù)Ti、Tj確定合適的加鎖粒度,然后計(jì)算沖突事務(wù)的Min-Gran(Ti)∩Min-Gran(Tj),如果不為?覫,則說(shuō)明它們不能通過(guò)降低加鎖粒度避免沖突,從而將后運(yùn)行的事務(wù)置入事務(wù)等待隊(duì)列;如果為?覫,則降低沖突事務(wù)的加鎖粒度級(jí)別,直到事務(wù)可并發(fā)執(zhí)行為止。當(dāng)互相沖突的事務(wù)運(yùn)行完成后,再把還在運(yùn)行的事務(wù)的加鎖粒度調(diào)整到最初運(yùn)行時(shí)的加鎖粒度。
動(dòng)態(tài)加鎖粒度的兩段鎖算法如下:
Lock Action(Ti,Tj)
BEGIN
IF Conflicit(Ti,Tj) THEN //*檢查二事務(wù)是否沖突
Store Gran(Ti), Gran(Tj) //*保存事務(wù)的
//原始加鎖粒度集
IF Min-Gran(Ti)∩Min-Gran(Tj)=Φ THEN
DO Decrease Lock-Gran(Ti),Lock-Gran(Tj)
UNTIL Gran(Ti)∩Gran(Tj)=Φ
//*降低加鎖粒度使二事務(wù)并發(fā)執(zhí)行
Ti Lock Gran(Ti)
Tj Lock Gran(Tj)
ELSE
Queue-Insert(Tj)//*Tj置入事務(wù)等待隊(duì)列
Block Tj until Ti release the lock
ENDIF
ELSE
Ti Lock Gran(Ti)
Tj Lock Gran(Tj)
ENDIF
IF Complete(Ti) THEN //*Ti事務(wù)執(zhí)行完畢,
//恢復(fù)Tj事務(wù)的原始加鎖粒度集
Restore Gran(Ti)
ENDIF
IF Complete(Tj) THEN //*Tj事務(wù)執(zhí)行完畢,
//恢復(fù)Ti事務(wù)的原始加鎖粒度集
Restore Gran(Tj)
ENDIF //*其中一事務(wù)執(zhí)行完畢,
//恢復(fù)另一事務(wù)的原始加鎖粒度集
END
以上算法說(shuō)明,對(duì)于一組事務(wù)T1,T2,……,Tn,其中每一個(gè)事務(wù)Ti(1≤i≤n)要先確定它的初始的加鎖粒度級(jí)別。通過(guò)對(duì)Ti、Tj(i≠j,1≤i≤n,1≤j≤n)的沖突檢測(cè)機(jī)制,確定它們是否能在已給定的加鎖粒度級(jí)別運(yùn)行。如果Ti、Tj沖突,再分別計(jì)算Min-Gran(Ti)、Min-Gran(Tj),判定在最小加鎖粒度級(jí)別上是否沖突;如果不沖突就說(shuō)明可以把Ti、Tj的加鎖粒度同時(shí)降低到最小加鎖粒度級(jí)別后并發(fā)執(zhí)行,這樣就增加了事務(wù)運(yùn)行的并發(fā)度。由于該算法遵守2PL協(xié)議,從而保證了這一組事務(wù)的運(yùn)行是可串行化的,也就保證了數(shù)據(jù)的一致性。
上述算法使用了事務(wù)等待隊(duì)列機(jī)制,故在死鎖方面可以通過(guò)檢測(cè)隊(duì)列中等待事務(wù)的時(shí)間來(lái)確定。
4 結(jié)束語(yǔ)
在數(shù)據(jù)倉(cāng)庫(kù)體系中,操作型數(shù)據(jù)環(huán)境(數(shù)據(jù)庫(kù))以及各種信息源也占有重要地位。在從信息源向數(shù)據(jù)倉(cāng)庫(kù)加載數(shù)據(jù)時(shí),還要考慮到信息源自身的特點(diǎn),如數(shù)據(jù)庫(kù)對(duì)用戶請(qǐng)求的實(shí)時(shí)相應(yīng)。關(guān)于通過(guò)動(dòng)態(tài)改變加鎖粒度來(lái)增加并發(fā)度的問(wèn)題,本文只涉及了一小部分,還有很多工作需要做,如選擇合適的加鎖粒度、信息源加鎖粒度級(jí)別的確定、事務(wù)等待隊(duì)列的機(jī)制等。
參考文獻(xiàn)
1 王勁波,薛永生,徐勛民.一種基于加鎖粒度的分布式高優(yōu)先級(jí)兩段鎖的并發(fā)控制模型.計(jì)算機(jī)應(yīng)用與軟件,2003;6(16)
2 Inmon W H.數(shù)據(jù)倉(cāng)庫(kù).北京:機(jī)械工業(yè)出版社,2003
3 王珊,羅立.從數(shù)據(jù)庫(kù)到數(shù)據(jù)倉(cāng)庫(kù).計(jì)算機(jī)世界,1996;15(7)
4 薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概論.北京:高等教育出版社,2000
