公務(wù)員期刊網(wǎng) 論文中心 正文

時(shí)間性能數(shù)據(jù)庫(kù)的運(yùn)用

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了時(shí)間性能數(shù)據(jù)庫(kù)的運(yùn)用范文,希望能給你帶來(lái)靈感和參考,敬請(qǐng)閱讀。

時(shí)間性能數(shù)據(jù)庫(kù)的運(yùn)用

本文作者:彭煒 單位:大同大學(xué)數(shù)計(jì)學(xué)院

1背景介紹

將數(shù)據(jù)庫(kù)中的數(shù)據(jù)和時(shí)間屬性進(jìn)行特殊處理的必要性在上世紀(jì)七十年代就被理解和提出.支持這種處理的數(shù)據(jù)庫(kù)被稱為時(shí)間數(shù)據(jù)庫(kù).快速數(shù)據(jù)恢復(fù)和更新(即在線訪問(wèn)即時(shí)信息的可能性)是數(shù)據(jù)庫(kù)管理系統(tǒng)最重要特征之一.自上世紀(jì)七十年代起的二十年中,時(shí)間數(shù)據(jù)庫(kù)已經(jīng)被非常詳盡的研究,但還沒(méi)有一種廣泛應(yīng)用的商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng)支持時(shí)間屬性,而且將時(shí)間屬性工具加入到結(jié)構(gòu)化查詢語(yǔ)言(SQL)標(biāo)準(zhǔn)中的嘗試也失敗了.時(shí)間屬性工具的缺乏造成了人們對(duì)時(shí)間數(shù)據(jù)功能的研發(fā)與執(zhí)行的不完善,其嚴(yán)重缺陷表現(xiàn)在以下幾方面:

*對(duì)完整性約束的應(yīng)用,復(fù)雜且效率低;

*對(duì)開(kāi)發(fā)者來(lái)說(shuō)執(zhí)行查詢的邏輯有模糊的連接,有些數(shù)據(jù)庫(kù)管理功能在應(yīng)用中才能被實(shí)現(xiàn);

*由于缺乏明確的設(shè)計(jì)模式,使程序的執(zhí)行產(chǎn)生多樣性,甚至在同一個(gè)應(yīng)用中就顯示出不同;

*同樣的功能被重復(fù)執(zhí)行.需要注意的是,幾乎所有關(guān)于時(shí)間數(shù)據(jù)庫(kù)的研究都存在著對(duì)支持時(shí)間數(shù)據(jù)的手段已包含在數(shù)據(jù)庫(kù)管理系統(tǒng)中并被執(zhí)行的假設(shè).雖然這樣的假設(shè)保證了查詢語(yǔ)言所必需的功能可以使用,但是時(shí)間屬性在數(shù)據(jù)庫(kù)管理系統(tǒng)水平上全面執(zhí)行的代價(jià)非常昂貴,且沒(méi)有現(xiàn)成可用的解決方案.

本文將論述如何在廣泛應(yīng)用的商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng)構(gòu)架中局部實(shí)施時(shí)間功能.因?yàn)椴荒軐?duì)已確立的信息系統(tǒng)程序設(shè)計(jì)和已開(kāi)發(fā)好的程序做出重大的改變,所以提出了一種在構(gòu)架中利用現(xiàn)有技術(shù)工具來(lái)實(shí)施的方法,這項(xiàng)課題的主要目的闡述如下:

*提供在傳統(tǒng)關(guān)系或?qū)ο箨P(guān)系的數(shù)據(jù)庫(kù)管理系統(tǒng)的構(gòu)架中使用時(shí)間屬性手段;

*對(duì)在應(yīng)用程序設(shè)計(jì)和數(shù)據(jù)庫(kù)已確立的方法中進(jìn)行細(xì)微改變的限制;

*執(zhí)行程序不能降低系統(tǒng)中沒(méi)有使用時(shí)間數(shù)據(jù)的那些部分的性能;

*不對(duì)使用傳統(tǒng)方式來(lái)保證數(shù)據(jù)完整性的控制造成妨礙;*執(zhí)行程序的成本必須低廉.

2基本執(zhí)行法則

2.1對(duì)于歷史數(shù)據(jù)的要求

歷史數(shù)據(jù)的存儲(chǔ)是系統(tǒng)的需求,這一需求可能對(duì)應(yīng)用的各個(gè)領(lǐng)域至關(guān)重要.系統(tǒng)的主要事件邏輯模塊可以在應(yīng)用程序的時(shí)間層面上進(jìn)行獨(dú)立的設(shè)計(jì)與開(kāi)發(fā).從本質(zhì)上講,支持歷史數(shù)據(jù)更改同支持事務(wù)完整性和經(jīng)授權(quán)的數(shù)據(jù)訪問(wèn),都屬于系統(tǒng)的基本功能.在本文中,使用的是區(qū)間時(shí)間的數(shù)據(jù)表達(dá)形式.假設(shè)一實(shí)體,它的任何歷史改變都必須存儲(chǔ)下來(lái),并同這實(shí)體的當(dāng)前狀態(tài)(即事物對(duì)象的普通狀態(tài))一起,表現(xiàn)出這個(gè)實(shí)體的表達(dá)形式.當(dāng)表達(dá)形式有效時(shí),除普通屬性外,它成為了一個(gè)被用于研究區(qū)間時(shí)間的抽象概念.在對(duì)象級(jí)別上,有效和時(shí)間的表達(dá)形式之間的關(guān)系通常取決于執(zhí)行程序.時(shí)間屬性的支持不會(huì)影響到系統(tǒng)事物邏輯分析和設(shè)計(jì),并且不需要任何特殊的開(kāi)發(fā)程序.需要存儲(chǔ)歷史數(shù)據(jù)的應(yīng)用程序的設(shè)計(jì)必須包括下列步驟:

*設(shè)計(jì)系統(tǒng)的事物邏輯;

*增加對(duì)保留某些事物實(shí)體的歷史變化的要求.

因此,設(shè)計(jì)步驟須指定實(shí)體以及之間關(guān)系.對(duì)于這些實(shí)體及關(guān)系,必須保留修改歷史.統(tǒng)一建模語(yǔ)言(UML)模板便是例子之一.應(yīng)用程序必須能夠處理歷史數(shù)據(jù),這就要求開(kāi)發(fā)特殊的界面來(lái)進(jìn)行數(shù)據(jù)訪問(wèn),開(kāi)發(fā)圖形界面向終端用戶呈現(xiàn)歷史數(shù)據(jù).應(yīng)用程序的進(jìn)程邏輯在時(shí)間面上的疊交狀態(tài),僅意味著概念上支持歷史更改要求的數(shù)據(jù)模型可被獨(dú)立地進(jìn)行設(shè)計(jì).包含系統(tǒng)實(shí)體有效狀態(tài)的數(shù)據(jù)模型稱為基本模型,對(duì)于歷史更改的基本模型來(lái)說(shuō),添加屬性的數(shù)據(jù)模型稱為時(shí)間模型.在本文中將就關(guān)系數(shù)據(jù)庫(kù)中的時(shí)間表達(dá)做出詳細(xì)的描述.支持歷史數(shù)據(jù)的方法不需要附加編碼.存儲(chǔ)歷史改變的表和表中更新數(shù)據(jù)的觸發(fā)器可以從基本模型的模式中自動(dòng)生成.

2.2對(duì)于歷史數(shù)據(jù)的表達(dá)

我們對(duì)實(shí)體及其關(guān)系進(jìn)行定義以便創(chuàng)建時(shí)間模式,這些實(shí)體和關(guān)系的歷史更改必須被存儲(chǔ)下來(lái).在基本模式中,這些實(shí)體及其關(guān)系是與關(guān)系表相關(guān)聯(lián)的.對(duì)每一個(gè)這樣的表,我們用與基本模式同樣的文件名創(chuàng)建一個(gè)附加表,并加以H前綴.例如,對(duì)文件名為EMPLOYEE的表,我們創(chuàng)建了以HEMPLOYEE為名的表.這個(gè)新的表包含了與基本表同樣的列,以及兩個(gè)額外的列——時(shí)間區(qū)間的開(kāi)始與結(jié)束,在這一區(qū)間中,表中每行的數(shù)值都是有效的.這兩個(gè)額外列的名字分別由基本表中的名字加以FTS(實(shí)施時(shí)間標(biāo)記)后綴和XTS(終止時(shí)間標(biāo)記)后綴來(lái)構(gòu)成.每一個(gè)H表都具有主鍵和外鍵.主鍵由基本表的主鍵和FTS列構(gòu)成.例如(圖1)表HEMPLOYEE,主鍵為:Primarykey(ID,EMPLOYEE-FTS)基本表的主鍵則被用做H表的外鍵:Foreignkey(ID)referencesEMPLOYEE(ID)H表中的數(shù)據(jù)自動(dòng)更新,因此,時(shí)間模式里不存在完整性約束.

2.3對(duì)于更改歷史的更新

現(xiàn)在來(lái)考慮在H表中插入和更新記錄重要的規(guī)則是應(yīng)用程序不可直接更新這些表中的數(shù)據(jù),H表應(yīng)進(jìn)行自動(dòng)更新.自動(dòng)更新可由觸發(fā)器執(zhí)行或者作為應(yīng)用程序構(gòu)架中的功能.以下是數(shù)據(jù)更新的規(guī)則:

*當(dāng)一個(gè)記錄插入到基本模式表中時(shí),同樣的數(shù)據(jù)也被插入到相應(yīng)的時(shí)間模式H表中FTS字段的數(shù)值被設(shè)成當(dāng)前的日期和時(shí)間,XTS字段的數(shù)值設(shè)成一個(gè)遠(yuǎn)離的時(shí)間點(diǎn).

*當(dāng)一個(gè)記錄在基本模式表中被更新時(shí),在H表中相應(yīng)的記錄(具有同樣的主鍵和XTS字段等于ENDDATE)也隨之更新.之后,這一記錄將不再有效,同時(shí)XTS字段被設(shè)為當(dāng)前時(shí)間.一個(gè)具有當(dāng)前字段值的新記錄隨即插入到H表,FTS字段設(shè)成當(dāng)前時(shí)間,XTS字段重新設(shè)成ENDDATE;

*當(dāng)基本模式表中的記錄被刪除時(shí),H表中相應(yīng)的記錄(XTS字段為ENDDATE)也隨即進(jìn)行更新,將XTS字段設(shè)為當(dāng)前時(shí)間.H表保留了所有數(shù)據(jù)更改的歷史.每一個(gè)H表中的記錄在區(qū)間[FTS,XTS]中都是有效的.更改歷史是連續(xù)的,前面描述的帶有同樣主鍵的記錄的FTS字段值與XTS字段值在同一時(shí)間進(jìn)行改變.H表的主鍵由基本表的主鍵和FTS字段構(gòu)成.由于時(shí)間是離散的,上面描述的模式不能保證主鍵的值是唯一的.

這一問(wèn)題可以通過(guò)附加檢查得以解決.如果另一個(gè)具有當(dāng)前FTS值的記錄已經(jīng)存在,那么至少在新的記錄中FTS有一位有效值會(huì)被增加.盡管基本模式中的所有數(shù)據(jù)在時(shí)間模式中都存在,基本模式仍是有用的,理由如下:

*完整性約束在時(shí)間模式中沒(méi)有定義,并且可以不被數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行核實(shí);

*時(shí)間模式表可能比基本模式表大很多;

*對(duì)于一些查詢,時(shí)間模式中的數(shù)據(jù)連接不如基本模式表中的連接有效.

以上提出的執(zhí)行方法對(duì)于其他類型的冗余也進(jìn)行了假設(shè),冗余的程度經(jīng)過(guò)了選擇,從而更易實(shí)行有效查詢.很明顯,為了能夠有效執(zhí)行查詢,數(shù)據(jù)庫(kù)需要進(jìn)行細(xì)微的調(diào)整.特別是時(shí)間表上應(yīng)選擇一組索引.不過(guò),這一問(wèn)題超出了本文論述的范圍,在此不詳敘述.我們強(qiáng)調(diào)不同的完整性約束可以在基本模式中存儲(chǔ)當(dāng)前數(shù)據(jù)的值,以確保建立高度可靠的數(shù)據(jù)庫(kù).

3數(shù)據(jù)庫(kù)查詢執(zhí)行

3.1包含時(shí)間條件的查詢

基本模式中的數(shù)據(jù)查詢提供了數(shù)據(jù)的當(dāng)前值.由于時(shí)間數(shù)據(jù)的支持使得在過(guò)去一定時(shí)間區(qū)間里獲得的有效數(shù)據(jù)、實(shí)體更改的歷史、帶有時(shí)間謂詞的執(zhí)行查詢以及生成各種報(bào)告均成為可能.例如我們可以找出一個(gè)員工在任職經(jīng)理時(shí)工資的改變,或者這一員工在一定時(shí)間區(qū)間里的平均工資.在本文中,將對(duì)以下查詢進(jìn)行探討:

*快照查詢可獲得在過(guò)去某一時(shí)間上實(shí)體及其關(guān)系的狀態(tài).例如我們可以查詢到某個(gè)員工在2000年12月31日的工資是多少;

*跟蹤日志查詢可以追溯實(shí)體更改的歷史例如可以查詢員工在過(guò)去5年中工資變動(dòng)的情況.

下面分別論述歷史數(shù)據(jù)表達(dá)如何應(yīng)用在以上的查詢中,從而在結(jié)構(gòu)化查詢語(yǔ)言(SQL)中對(duì)查詢進(jìn)行表達(dá).

3.2快照查詢

實(shí)際上,快照查詢是帶有附加參數(shù)的普通查詢,也就是追溯查詢數(shù)據(jù)有效時(shí)的時(shí)間.為了將一個(gè)普通查詢轉(zhuǎn)換為快照查詢,需要執(zhí)行以下步驟:(1)將基本表中的參照替換為相應(yīng)H表中的參照.(2)對(duì)每個(gè)與查詢相關(guān)的H表,在WHERE語(yǔ)句中添加附加條件:snapshotdate>=FTS和snapshotdate<XTS.然后,將特定時(shí)間里的記錄從每個(gè)H表中選擇出來(lái)例如選擇當(dāng)前某位員工工資的查詢?yōu)?SELECTE.SALARYFROMEMPLOYEEEWHEREE.ID=100這種在特定時(shí)間里對(duì)那位員工工資的查詢被轉(zhuǎn)換成下面的查詢:SELECTE.SALARYFROMHEMPLOYEEEWHEREE.ID=100ANDEMPLOYEEFTS>=:snapshotdateANDEMPLOYEEXTS<:snapshotdate由于同一位員工的時(shí)間區(qū)間是不會(huì)重疊的,兩個(gè)查詢產(chǎn)生同一個(gè)記錄需要注意的是,有效數(shù)據(jù)在H表中被復(fù)制,因此,最后一個(gè)查詢也會(huì)產(chǎn)生有效數(shù)據(jù)(例如,當(dāng)snapshotdate=currentdate).

3.3跟蹤日志查詢

現(xiàn)在我們來(lái)論述追溯歷史更改的查詢.這種查詢的復(fù)雜度取決于與查詢有關(guān)的時(shí)間表的數(shù)量,所選記錄有效的時(shí)間區(qū)間在不同的時(shí)間表中必須吻合.為了創(chuàng)建一個(gè)跟蹤日志查詢,需要兩個(gè)帶有不同參數(shù)的函數(shù).一個(gè)產(chǎn)生最大自變量,另一個(gè)產(chǎn)生最小自變量.在查詢中會(huì)用到下列表達(dá)式:

*maximal(table1fts,…,tablenfts)從自變量列表中選出最大的自變數(shù).我們將其代入所有與查詢有關(guān)的H表的FTS值.為了簡(jiǎn)潔起見(jiàn),這一函數(shù)產(chǎn)生的值記為MAXFTS;

*minimal(table1xts,…,tablenxts)從自變量列表中選出最小的自變數(shù).我們將其代入所有與查詢有關(guān)的H表的XTS值.同樣,這一函數(shù)產(chǎn)生的值記為MINXTS.為了將查詢轉(zhuǎn)換為跟蹤日志查詢,需要執(zhí)行以下步驟:(1)將基本表中的參照替換為相應(yīng)H表中的參照.(2)將表達(dá)式MAXFTS和MINXTS加入所選字段的列表中.(3)將附加條件MAXFTS<MINXTS加入WHERE語(yǔ)句中.(4)下面的步驟可能需要操作:對(duì)歷史更改進(jìn)行追溯的區(qū)間進(jìn)行界定.在WHERE語(yǔ)句中加入條件MINXTS>SANDMAXFTS<E,其中S和E分別是區(qū)間的開(kāi)始值和終止值.假設(shè)查詢一位員工及其部門的信息:隨著時(shí)間的變化,這位員工的工資、所在部門甚至姓名都有可能改變.在一定時(shí)間區(qū)間里選擇同樣數(shù)據(jù)的跟蹤日志查詢?yōu)椤?/p>

4結(jié)論

本文所論述的對(duì)于時(shí)間數(shù)據(jù)的區(qū)間表達(dá)的執(zhí)行并不新奇,類似的執(zhí)行程序已被很多商業(yè)軟件包和開(kāi)發(fā)小組所用.然而人們對(duì)于效率的問(wèn)題,完整性約束的支持,應(yīng)用程序開(kāi)發(fā)以及查詢的設(shè)計(jì)都應(yīng)更深入的思考.

本文提出的技術(shù)考慮了上述所有因素,因此,保證了高效和可信賴軟件的開(kāi)發(fā).文章也僅描述了在非時(shí)間數(shù)據(jù)庫(kù)管理系統(tǒng)中支持時(shí)間屬性的基本方面.許多重要的課題還有待研究,其中包括:

*應(yīng)用程序的額外功能[例如撤銷(Undo)功能];

*執(zhí)行并使用基于事件的表達(dá)方式;

*與事務(wù)支持機(jī)制的相互作用;

*對(duì)于有效時(shí)間的表達(dá)和使用(相對(duì)于事務(wù)時(shí)間).

相關(guān)熱門標(biāo)簽