




已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除物件導(dǎo)向資料庫(kù)管理 Part I 物件資料庫(kù)管理概論1第一章 前言1第二章 物件(Objects)32.1物件(Objects)32.2 物件識(shí)別碼(Object identifiers)32.3物件鍵值(Object keys)42.4物件屬性(Object attributes)52.5參考屬性(Reference attributes)52.6群集屬性(Collection attributes)62.7衍生屬性(Derived attributes)62.8程序(Procedures)7第三章 關(guān)係(Relationships)93.1子類別和父類別的關(guān)係(ISA)93.2二元關(guān)係(Binary relationships)93.3非二元關(guān)係(Nonbinary relationships)103.4 相反屬性(Inverse attributes)123.5 關(guān)係的實(shí)作(Relationship implementation)123.6 參考完整性(Reference integrity)13Part II Control Concept of OODMS15第四章 綱要演進(jìn)(Schema evolution)154.1 綱要(Schema)154.2 綱要改變的分類164.3 綱要修改四個(gè)主要方法18第五章 物件版本管理(Object versions)205.1 版本管理205.2 物件導(dǎo)向資料庫(kù)版本管理21第六章 交易控制(Transactions control)256.1同步和復(fù)原概念256.2 典型的交易特性266.3 交易的鎖定276.3.1 鎖定模式276.3.2 兩階段式鎖定286.3.3 死結(jié)(Deadlocks)286.4 樂(lè)觀的同步控制296.5 復(fù)原30第七章 授權(quán)(Authorization)327.1 概念327.1.1 明示性正向授權(quán)(explicit positive authorization)327.1.2 暗示性授權(quán)(implicit authorization)327.1.3 正向/負(fù)向授權(quán)(Positive/negative authorization)337.2暗示授權(quán)(Implicit authorization)347.2.1授權(quán)使用者(Authorization Subjects)347.2.2授權(quán)操作(Authorization Operations)357.2.3授權(quán)物件(Authorization Objects)36第八章 資料庫(kù)的效能表現(xiàn)408.1 前言408.2 OODB的效能考量(Performance consideration)408.3 物件導(dǎo)向資料庫(kù)之績(jī)效評(píng)估方面41Part III C. J. Date對(duì)OO-Model觀點(diǎn)43第九章 Mr. DATE對(duì)於物件導(dǎo)向模式的評(píng)論439.1 簡(jiǎn)介439.2 物件導(dǎo)向模式的回顧439.3 定義域=物件類別469.3.1 定義域469.3.2 型態(tài)繼承(Type Inheritance)509.3.3 結(jié)論539.4 關(guān)連物件類別559.5 物件導(dǎo)向關(guān)連式的共存模式64Part IV 其他補(bǔ)充66第十章 Introduction of Object Data Management SystemObjectStore6610.1 ObjectStore的特色:6610.2 ObjectStore Development tools6810.3 ObjectStore Database Management Highlights6910.4 結(jié)語(yǔ)70參考資料71精品文檔Part I 物件資料庫(kù)管理概論第一章 前言物件導(dǎo)向資料庫(kù)系統(tǒng)(Object-Oriented Database)的發(fā)展動(dòng)機(jī)來(lái)自物件導(dǎo)向程式語(yǔ)言,物件在物件導(dǎo)向語(yǔ)言中的生命週期只有在程式執(zhí)行期間而已。由於使用者需要儲(chǔ)存已處理完畢物件的需求,促成儲(chǔ)存物件的物件導(dǎo)向資料庫(kù)的發(fā)展,透過(guò)物件導(dǎo)向資料庫(kù),物件可以永久存在,同時(shí)達(dá)成共享的目的。其次,隨著其他領(lǐng)域如工程、專家系統(tǒng)及多媒體的發(fā)展,多樣且複雜的資料儲(chǔ)存型態(tài)的需求,也帶動(dòng)了物件導(dǎo)向資料庫(kù)的蓬勃發(fā)展,因此物件導(dǎo)向資料庫(kù)的應(yīng)用也變得更加廣泛。物件導(dǎo)向資料庫(kù)主要架構(gòu):1.資料模式:此類資料庫(kù)之資料模式根源於物件導(dǎo)向程式語(yǔ)言。物件導(dǎo)向程式語(yǔ)言主要包含抽象資料型態(tài)的概念,此型態(tài)清楚地定義一個(gè)資料結(jié)構(gòu)(或物件)之公有與私有的部分。抽象資料型態(tài)在物件導(dǎo)向程式語(yǔ)言中,稱為類別(Class),封裝了物件之私有的資料部分與公有的程序部分(稱為Method)。封裝 (Encapsulation)的理由,主要是想透過(guò)模組化來(lái)簡(jiǎn)化程式的建立與維護(hù)工作。物件是一個(gè)黑箱(black box),能被系統(tǒng)獨(dú)立地建立與修改,只要其公有的介面 (Method)沒(méi)有被改變。2.資料庫(kù)結(jié)構(gòu):此類資料庫(kù)之資料庫(kù)結(jié)構(gòu)是,擴(kuò)大目前的程式語(yǔ)言(如C+),使其提供永續(xù)(Persistence)、同時(shí)存取控制(Concurrency Control)、與其他資料庫(kù)能力。此類資料庫(kù)管理系統(tǒng)傳統(tǒng)上提供一個(gè)查詢語(yǔ)言,但查詢語(yǔ)言與程式語(yǔ)言都在應(yīng)用系統(tǒng)程式環(huán)境裡執(zhí)行,分享相同的型態(tài)系統(tǒng)和資料工作空間。亦即此結(jié)構(gòu)對(duì)資料提供一個(gè)單一的環(huán)境。物件導(dǎo)向資料庫(kù)的特色:物件導(dǎo)向資料庫(kù)為一個(gè)支持以物件導(dǎo)向?yàn)榛A(chǔ)模式的資料庫(kù)管理系統(tǒng),利用綱要(Schema)提供對(duì)物件的描述,持續(xù)儲(chǔ)存物件的能力以及定義與處理的語(yǔ)言。它包含了一般資料庫(kù)所有的查詢語(yǔ)言(Query Language)、索引(Indexing)、叢集(Clustering)、同步控制(Concurrency Control)、多使用者存?。∕ulti-user access)及復(fù)原(Recovery)等技術(shù),亦必須提供版本管理(Version management)及綱要演進(jìn)(Schema evolution)的管理能力。因此,物件導(dǎo)向資料庫(kù)可視為物件導(dǎo)向技術(shù)與資料庫(kù)管理功能的結(jié)合體,結(jié)合了資料庫(kù)的管理功能及物件導(dǎo)向的物件認(rèn)證(Object Identity)抽象資料型態(tài)(Abstract Data Typing)及繼承(Inheritance)特色。在本部份中,探討有關(guān)連式模型及一些進(jìn)階資料庫(kù)技術(shù)。在ODMS的主要功能是在支援工程上、科學(xué)上、及辦公室應(yīng)用程式和一些較複雜的傳統(tǒng)商業(yè)應(yīng)用程式。我們將把焦點(diǎn)放在ODMS所提供的功能和一些在實(shí)務(wù)上已經(jīng)被用來(lái)建構(gòu)這些功能的方法。物件資料庫(kù)管理的工作仍然處?kù)冻跗诎l(fā)展階段,沒(méi)有像關(guān)連式系統(tǒng)一樣的單一資料模型,現(xiàn)在仍存在許多開(kāi)放性的研究議題於物件資料庫(kù)管理方面。因?yàn)檫@麼多的方法已經(jīng)被使用,因此要提供一個(gè)單一的,整合性的物件資料管理描述是不太可能的。第二章 物件(Objects)2.1物件(Objects)“物件” 在物件導(dǎo)向的觀念裡,所有的東西都是以物件表示,物件之間則透過(guò)訊息(message)做相互的溝通,一個(gè)物件包含一個(gè)唯一的物件識(shí)別編號(hào)(Object Identity,簡(jiǎn)稱OID)、一個(gè)狀態(tài)(state)與一組物件運(yùn)作行為(behavior),物件的組成是來(lái)描述物件的屬性與其處理程序;在資料庫(kù)系統(tǒng)中,物件又有著許多的意義,然而一般在物件資料管理系統(tǒng)(ODMS)中則具體呈現(xiàn)兩個(gè)物件最基本的特性。1.物件群集(Object grouping):物件本身可以用來(lái)代表附屬於真實(shí)世界實(shí)體中的群組資料,也就可以說(shuō)是由一組物件所組合而成的物件,例如:一份文件或一個(gè)人。與此相關(guān)的說(shuō)法,稱之為複合物件(Complex Objects)。OO系統(tǒng)通常都提供Complex Objects的概念,讓使用者能夠?qū)⒄鎸?shí)世界的個(gè)體表示出來(lái)。在一個(gè)Complex Objects中,可以有許多不同個(gè)數(shù)的欄位,每一個(gè)欄位的值可以是atomic data value或者指示參考到其他的物件。2.物件識(shí)別碼(Object identify,OID):物件導(dǎo)向資料庫(kù)給予每一個(gè)物件本身包含一個(gè)唯一且獨(dú)立的識(shí)別值,以顯示物件的認(rèn)證具有唯一性及不可改變性。由於關(guān)連式模型(Relational model)是以值為基礎(chǔ)的(value-based):一個(gè)實(shí)體或物件是經(jīng)由主鍵來(lái)識(shí)別。而在一個(gè)以識(shí)別為基礎(chǔ)(identity-based)的物件導(dǎo)向資料庫(kù)系統(tǒng)中允許一個(gè)物件可以經(jīng)由內(nèi)部產(chǎn)生的唯一識(shí)別碼來(lái)被其他的物件所參考,我們稱為物件識(shí)別碼。2.2 物件識(shí)別碼(Object identifiers)首先要注意,OID是位址或指標(biāo),而且是使用者所看不到的。OID的優(yōu)點(diǎn)是方便控制物件的儲(chǔ)存以及和其他物件之間的聯(lián)繫。OID的長(zhǎng)度會(huì)大大的影響資料庫(kù)的大小。主要的原因是因?yàn)槲锛g的參考,在OO應(yīng)用程式之間是經(jīng)常發(fā)生的。OID在實(shí)作上有幾種方法,可能是實(shí)體(Physical)或邏輯(Logical)的位址表示方法,以下列出四種方式:1. 位址(Address):利用物件中,儲(chǔ)存的實(shí)體位址來(lái)識(shí)別。位址長(zhǎng)度約為32bit或更少,以這種方式來(lái)讀取物件資料是最快、最有效率的方式。然而在資料庫(kù)系統(tǒng)中很少使用實(shí)體位址,因?yàn)槿粢獙⑽锛苿?dòng)或刪除,得先將現(xiàn)存所有物件之間的參考關(guān)係都被全部找到,才能夠被允許將該物件移動(dòng)或刪除,因?yàn)楸粍h除錯(cuò)物件,造成參考不完整性出現(xiàn)。2. 結(jié)構(gòu)化位址(Structured address):此種方式是關(guān)連式系統(tǒng)中最常使用的一種方式。位址中包含了實(shí)體和邏輯資料兩個(gè)部份,在左邊的位數(shù)放物件所儲(chǔ)存的實(shí)體segment和page號(hào)碼,便於快速找到物件所在的磁區(qū);在其他的位數(shù)則存放一個(gè)邏輯的偏移量,用來(lái)精確的找到物件存放放置。此種方式下我們可以輕易移動(dòng)或修改物件資料。3. 代替性編號(hào)(Surrogates):這是一種純粹邏輯表示的方法,利用演算來(lái)保証產(chǎn)生一個(gè)唯一的OID。再根據(jù)這個(gè)邏輯OID對(duì)應(yīng)到實(shí)體位址來(lái)讀取物件資料。此種方式在執(zhí)行時(shí)的效率最差。4. 型態(tài)代替性編號(hào)(Typed Surrogates):這種方式是上述第三種方式的修正,包含型態(tài)編號(hào)和物件編號(hào)兩個(gè)部份。物件編號(hào)部份是由每一個(gè)型態(tài)藉由不同的計(jì)數(shù)器所產(chǎn)生。2.3物件鍵值(Object keys)一些ODMS允許物件可以取一個(gè)有意義的名稱及物件識(shí)別碼。例如,下列所展示的Document資料庫(kù)中,我們可能會(huì)使用標(biāo)題名稱來(lái)查詢Document物件及其所包含的Chapter物件。這些名稱就好比在關(guān)連式系統(tǒng)中的主鍵的功能一樣;在物件導(dǎo)向系統(tǒng)中我們叫它物件鍵值。事實(shí)上,假如一個(gè)資料庫(kù)系統(tǒng)提供唯一的物件識(shí)別碼但是在處理的過(guò)程中放棄了物件鍵值,可以說(shuō)是遺失了在原有關(guān)連式系統(tǒng)中的一些功能。當(dāng)然,任何一個(gè)物件屬性值都可以被視為一個(gè)鍵值,只要DBMS允許聯(lián)合物件查閱。定義鍵值的好處是什麼呢?主要是為了方便性:一個(gè)簡(jiǎn)單的語(yǔ)法就可以藉由鍵值來(lái)參考到物件,而且DBMS也可以自動(dòng)的利用鍵值是否唯一來(lái)確認(rèn)完整性限制(integrity constraint)。另外,OO的應(yīng)用程式一般被應(yīng)用在視為可以在互相聯(lián)結(jié)的物件網(wǎng)路上使用。所以一個(gè)程式一開(kāi)始,需要存取某些已知的物件,然後再透過(guò)此物件關(guān)聯(lián)存取其他物件。因此,資料庫(kù)也必須提供某些機(jī)制能夠識(shí)別一個(gè)到多個(gè)物件,所以可以透過(guò)替物件命名(Naming)的方式達(dá)成。Document: title: STRING;revision: DATE;keywords: SETSTRING;chaps: LISTChapter Chapter: title: STRING;number: INTEGER;doc: Document 在大部份的ODMS中,物件間的參考不是利用OID就是使用物件鍵值。在ODMS中物件鍵值的實(shí)作方式和傳統(tǒng)的關(guān)連式系統(tǒng)建立主鍵的方式不太一樣。物件鍵值可以利用hash或B-tree索引對(duì)應(yīng)到OID。例如在ObjectStore系統(tǒng)中允許執(zhí)行如下的敘述:Document:title=”O(jiān)bject Data Management”:查詢物件2.4物件屬性(Object attributes)物件是使用者定義的,用來(lái)表示真實(shí)世界或抽象的一個(gè)實(shí)體,例如;文件、人等。在關(guān)連式系統(tǒng)中,利用記錄(records)來(lái)表示物件,在表格中的值則以好比記錄的屬性值方式來(lái)儲(chǔ)值。而在物件導(dǎo)向資料庫(kù)中,1. 物件屬性值可以是複雜值(complex value),如群集或是參考到其他物件的屬性值。2. 使用者可以自行定義所需的資料型態(tài),彌補(bǔ)內(nèi)建資料型態(tài)的不足。3. 物件屬性也可以是影音資料,通常這些資料型態(tài)稱之為binary large objects(BLOBS,二進(jìn)位大型物件:用來(lái)儲(chǔ)存包含如影音、聲音、視訊等大量二進(jìn)位資料的物件)。好比關(guān)連式系統(tǒng)中記錄的屬性值一樣,在ODMS中物件的屬性有屬性名稱且一般都以“.”的表示方式來(lái)參考到某物件的屬性值。例如:在文件類別中物件d的revision屬性值可以表示如下:d.revision無(wú)論型態(tài)或大小為何,只要屬性包含文字值(literal values)則稱為簡(jiǎn)單屬性。也就是說(shuō)屬性值屬於文字值,就稱為簡(jiǎn)單屬性。2.5參考屬性(Reference attributes)在上節(jié)中我們介紹了簡(jiǎn)單屬性的表示方式。在本節(jié)中將介紹三種複雜的屬性:參考(reference)、群集(collections)、和衍生屬性。參考屬性是用來(lái)表示物件間的關(guān)係(relationships)。參考屬性類似程式語(yǔ)言中的指標(biāo)功能,或是關(guān)連式系統(tǒng)中外來(lái)鍵(foreign key)的功能。然而,還是有一些重要的差異:1. 參考屬性不可以被塗改的(corrupted),但是指標(biāo)可以被塗改。當(dāng)被參考到的物件被殺掉時(shí),則參考屬性將自動(dòng)失效。2. 參考屬性不像外來(lái)鍵使用一個(gè)使用者看得見(jiàn)的(user-visible)值來(lái)建立聯(lián)結(jié)關(guān)係。所有在被參考物件中的值可以被改變,但是參考屬性值仍將指到同一個(gè)物件。相對(duì)於在關(guān)連式系統(tǒng)中使用外來(lái)鍵,我們可以定義一個(gè)Chapter物件的參考屬性Doc來(lái)建立和Document物件間的參考關(guān)係如下:Chapter: Title: String;Number: Integer;Doc: Document 2.6群集屬性(Collection attributes)第二種複雜的屬性,群集屬性,通常被使用來(lái)表示串列值(LIST)、集合值(SET)、或是陣列值(Array)。群集可以包含簡(jiǎn)單屬性值或是參考屬性值。如下面的例子所示,我們可以定義二個(gè)Document物件的集合值屬性:Document: Title: String;Revision: Date;Keyword: SETString;Chaps: LISTChapter 第一個(gè)群集屬性,Keyword,是Document物件中關(guān)鍵字字串的集合,可以利用主題的方式來(lái)查閱文件。第二個(gè)群集屬性,Chaps,代表Document物件所包含的Chapter物件串列。2.7衍生屬性(Derived attributes)屬性值可以被定義成程序的方式而不僅是值的方式,程序可以指定於當(dāng)值被查詢或指派時(shí)執(zhí)行。衍生屬性最大的特色是,此屬性值並沒(méi)有明顯的儲(chǔ)存著,而是在需要時(shí)計(jì)算出來(lái)。另外,衍生屬性也可以增加資料的獨(dú)立性。所謂的資料獨(dú)立性,是指當(dāng)資料庫(kù)的綱要改變時(shí),不會(huì)影響外部對(duì)此綱要的景觀。不過(guò)一般程式語(yǔ)言不容易支援此功能。(In C+ for example, a function call is syntactically different than an attribute reference, so providing transparent derived attributes is not possible.)例如,假設(shè)我們採(cǎi)用一個(gè)新的機(jī)制來(lái)追蹤Document物件的修正版本,定義一個(gè)Document的屬性叫creation其型態(tài)為integer,用來(lái)產(chǎn)生日期資料。然後,我可以以程序的方式,也就是衍生屬性的方式,來(lái)重新定義舊的revision屬性如下所示:Document: creation: Integer; /* seconds since 1950 */revision: DATE PROC () =secsToDate(creation + secsTo1950);2.8程序(Procedures)到目前為止,前面所提到均屬於處理結(jié)構(gòu)的物件導(dǎo)向(structural object-oriented)物件內(nèi)部的資料結(jié)構(gòu)。在本節(jié)中,我們將介紹操作物件的程序。相較於傳統(tǒng)的DBMS,ODMS提供一個(gè)完全計(jì)算性(computationally complete)的資料庫(kù)存取語(yǔ)言,就是資料庫(kù)語(yǔ)言可以執(zhí)行程式語(yǔ)言所能作的相同運(yùn)算。除此之外,ODMS也提供連結(jié)資料庫(kù)物件和程序的功能。在行為物件導(dǎo)向系統(tǒng)(behaviornally object-oriented systems)所使用的程序稱為方法(method),用來(lái)封裝或隱藏物件所包含的屬性。一個(gè)物件所包含的屬性是私有性的(private),唯有透過(guò)物件所提供的方法才能存取或修改這些私有性的資料。ODMS的應(yīng)用程式必須要有將程序和資料一樣的儲(chǔ)存在資料庫(kù)中的能力。事實(shí)上,在物件導(dǎo)向系統(tǒng)中,物件中所包含的程序是唯一使用者可以直接存取的。一般ODMS有兩種方法來(lái)儲(chǔ)存程序的內(nèi)容:1. 程序的儲(chǔ)存和執(zhí)行都在現(xiàn)存程式語(yǔ)言的環(huán)境之中,以一個(gè)程式檔的方式;程序並未和物件型態(tài)定義一起儲(chǔ)放在資料庫(kù)中。許多的物件導(dǎo)向ODMS產(chǎn)品大都採(cǎi)用此種方式。2. 程序的原始碼和部份己編譯過(guò)的二進(jìn)位碼都儲(chǔ)存在資料庫(kù)之中,這種方式通常被用於關(guān)連式系統(tǒng)所延伸的物件導(dǎo)向系統(tǒng)如;POSTGRES、ORION。第一種方式在執(zhí)行較有效率因?yàn)椴豁氁僮鲃?dòng)態(tài)繫結(jié)(dynamic binding),但是第二種方式使得新的程序可以藉由網(wǎng)路分享給眾多使用者。第三章 關(guān)係(Relationships)物件導(dǎo)向的產(chǎn)品及物件導(dǎo)向的術(shù)語(yǔ)裡的relationship一般來(lái)說(shuō)是指關(guān)連式資料庫(kù)中的外部鍵(foreign key)關(guān)係。不過(guò)它還可以再區(qū)分為三類:3.1子類別和父類別的關(guān)係(ISA)以類階層來(lái)代表,例如:ECTANGLE ISA (PLOYGON) 四邊形是屬於多邊形的3.2二元關(guān)係(Binary relationships)在物件導(dǎo)向資料系統(tǒng)中關(guān)係的表示是利用前面章節(jié)所提到的複雜屬性來(lái)完成:參考(reference)和參考群集(collections of references)屬性。二元關(guān)係可以利用如下的方式來(lái)建立:1. 我們藉由分別新增一個(gè)參考屬性到抽象資料型態(tài)A和B中,來(lái)表示A和B二者之間的一對(duì)一關(guān)係。2. 我們藉由新增一個(gè)參考屬性(reference attribute)到A和一個(gè)參考群集屬性(reference-set attribute)到B,來(lái)表示A和B兩者之間的多對(duì)一關(guān)係。3. 我們藉由分別新增一個(gè)參考群集屬性到A和B中,來(lái)表示A和B之間的多對(duì)多關(guān)係。圖1圖1提供上述三種情況下的二元關(guān)係例子。在圖的左邊是一些定義物件型態(tài)的語(yǔ)法,在圖的右邊則是利用圖形來(lái)表示物件實(shí)例和根據(jù)定義所產(chǎn)生的關(guān)係。例如:Document D1有一個(gè)Index I1;三個(gè)Chapters C1、C2、C3和一個(gè)唯一的Author P2。Document D2有二個(gè)Authors P1、P2;唯一的Chapter C和Index I2。3.3非二元關(guān)係(Nonbinary relationships)之前介紹過(guò)了二元關(guān)係在物件導(dǎo)向系統(tǒng)中的表示方式,現(xiàn)在讓我們進(jìn)一步的介紹非二元關(guān)係,也就是多元關(guān)係的表示方式。請(qǐng)注意,要表示一個(gè)多元的關(guān)係必須建立一個(gè)新的物件型態(tài)來(lái)表示,該物件型態(tài)的名稱就代表該多維關(guān)係的名稱。從使用者的觀點(diǎn)來(lái)看,利用中介物件(intermediate object)來(lái)表示多元關(guān)係使得整個(gè)資料庫(kù)的結(jié)構(gòu)顯得更為複雜。然而,在關(guān)連式系統(tǒng)中也是同樣的方式,須要一個(gè)額外的關(guān)連來(lái)表示。下圖為多元關(guān)係的例子:圖2.3.4 相反屬性(Inverse attributes)在3.2節(jié)二元關(guān)係的圖1中,文件(document)和章節(jié)(chapter)之間的關(guān)係是以如下的方式來(lái)處理:在文件(document)物件中我們用chaps屬性來(lái)代表它的章節(jié),而在章節(jié)(Chapter)物件中我們用doc屬性來(lái)代表它屬於那個(gè)文件。注意,這不只是單單加入屬性而已。相反地,我們使用雙向箭頭來(lái)代表相反屬性(inverse attributes),所以doc: Document chaps; chaps: LIST Chapter doc;表示doc的相反屬性是chaps,而chaps的相反屬性是doc。我們稱這個(gè)兩屬性互相相反,也就是它們代表同一件事情的不同的兩個(gè)面。在3.2節(jié)的圖1中,還有另外兩對(duì)相反屬性,第一個(gè)是文件和目錄之間的一對(duì)一關(guān)係,它們被表達(dá)成一組相反屬性for及index,第二個(gè)是文件和作者之間的多對(duì)多關(guān)係,它們也被表達(dá)成一組相反屬性pubs及authors。注意,每一組的相反屬性間的彼此關(guān)係必須不斷的保持正確且一致。例如說(shuō),我們?yōu)橐涯骋徽鹿?jié)新增至某一文件中,我們?cè)O(shè)定了該章節(jié)物件的doc屬性,那麼,資料庫(kù)系統(tǒng)就必須自動(dòng)地修改該文件物件的chaps屬性。同理,如果某一章節(jié)被移轉(zhuǎn)屬於另一文件,則這兩個(gè)相反屬性都必須同時(shí)被更動(dòng)。所謂參考完整性的問(wèn)題即是如何維持相反屬性間一致的問(wèn)題,之後將討論此一問(wèn)題。3.5 關(guān)係的實(shí)作(Relationship implementation)在不同的OODBMS對(duì)於關(guān)係的實(shí)作有不同的方法。在磁碟上,關(guān)係一般而言是使用OID來(lái)儲(chǔ)存。但是,一但放到記憶體中,關(guān)係可以用OID來(lái)表示,或者將OID轉(zhuǎn)換成(Swizzled)虛擬記憶體的指標(biāo)(ADDRESS)來(lái)表示,此種方式稱為pointer Swizzling。Swizzling是一種將以磁碟為主的關(guān)係表示,轉(zhuǎn)成物件在記憶體位置的程序。當(dāng)物件有需要時(shí)被載入時(shí),這個(gè)程序就會(huì)被執(zhí)行。Pointer Swizzling 的好處可以加速物件在記憶體存取物件的速度。(Swizzling原理在此不贅述)3.6 參考完整性(Reference integrity)假如我們想在物件識(shí)別基礎(chǔ)(object-identify-based)表示方式下提供參考完整性,好比在關(guān)連式系統(tǒng)下利用鍵值來(lái)達(dá)成,我們沒(méi)有辦法很簡(jiǎn)單的確認(rèn)參考屬性是否參考到適當(dāng)型態(tài)的合法物件。所以現(xiàn)在我們只能列出幾種不同層次的參考完整性來(lái)討論:1. 沒(méi)有完整性檢查(No integrity checks):一個(gè)系統(tǒng)可能在參考完整性方面不提供任何的檢查。在這種方式之下,可能會(huì)發(fā)生參考到錯(cuò)誤型態(tài)的物件,甚至是不存在的物件,只有靠使用者自行在應(yīng)用程式中撰寫(xiě)方法來(lái)實(shí)現(xiàn)參考完整性。也就說(shuō),假如一個(gè)物件已經(jīng)被刪除了,使用者必須先確定所有參考到這個(gè)物件的參考屬性都已經(jīng)事先被移除了或是設(shè)為NIL。所以使用這個(gè)方法具有危險(xiǎn),因?yàn)槭褂谜邥?huì)有所疏忽的狀況存在。2. 參考確認(rèn)(Reference validation):系統(tǒng)可以確認(rèn)被參考到的物件存在且是正確的型態(tài)。不過(guò),物件刪除是不被允許的。以下介紹二種方式達(dá)到此一水準(zhǔn)n 當(dāng)物件不再被使用者存取時(shí),系統(tǒng)必須可以自動(dòng)的將物件刪除,例如GemStone的作法。一般採(cǎi)用此種方式的系統(tǒng),當(dāng)物件應(yīng)該被自動(dòng)刪除時(shí),並不允許讓使用者直接刪除或執(zhí)行參考計(jì)數(shù)(reference counting)等演算法。n 當(dāng)物件不再被使用時(shí),系統(tǒng)允許物件直接被刪除掉,但是相關(guān)的參考將自動(dòng)的被刪除掉。這種方法可藉由許多的方式來(lái)達(dá)成。假設(shè)OIDs不被再利用,則參考到已經(jīng)刪除物件的參考隨即將被刪除。假設(shè)一個(gè)有效率的機(jī)制被設(shè)計(jì)來(lái)發(fā)現(xiàn)所有跟某個(gè)物件有關(guān)的參考,則參考到已經(jīng)被刪除物件的參考將可以全部設(shè)成NIL,例如,IRIS就是採(cǎi)取這種方式。3. 關(guān)係完整性(Relationship integrity):系統(tǒng)允許直接對(duì)物件或關(guān)係進(jìn)行刪除或修改,並自動(dòng)地保持物件間關(guān)係的正確性。前面所提到利用相反屬性(inverse attribute)來(lái)表示二維關(guān)係的方式即提供如關(guān)連式系統(tǒng)下的參考完整性限制,但是1和2並未提供。4. 自訂參考語(yǔ)意(Custom reference semantic):大部份較複雜的系統(tǒng)允許資料庫(kù)設(shè)計(jì)者對(duì)每一個(gè)型態(tài)、物件、或關(guān)係指定自訂適合(custom-tailored)的參考完整性語(yǔ)意。例如,當(dāng)一個(gè)Document被刪除時(shí),使用者可能希望把相關(guān)的Chapter都刪除,然而在上面第3點(diǎn)說(shuō)明的處理方式下只能將參考到Document的關(guān)係刪除或設(shè)為NIL來(lái)維持參考完整性限制。這種刪除操作在物件導(dǎo)向的系統(tǒng)裡面是沒(méi)有提供的,使用者必須自行撰寫(xiě)方法來(lái)執(zhí)行。Part II Control Concept of OODMS物件導(dǎo)向資料庫(kù)中變動(dòng)是常態(tài)而非異常,物件導(dǎo)向資料庫(kù)管理綱要演進(jìn)的特色,與其他資料庫(kù)管理系統(tǒng)比較較具優(yōu)勢(shì)。Smith 與 Joshi Smith and Joshi, 1995 以物件導(dǎo)向模組化能力的角度進(jìn)行研究,認(rèn)為物件導(dǎo)向資料庫(kù)提供豐富的模式化能力,再加上物件導(dǎo)向技術(shù)可將複雜的製造環(huán)境切割為小的模組的能力,透過(guò)可以擴(kuò)充的特性讓未來(lái)系統(tǒng)的修改更簡(jiǎn)單。其他有關(guān)物件導(dǎo)向的優(yōu)點(diǎn),例如在於處理複雜的資料型態(tài)及複雜的資料操作時(shí)具有優(yōu)異的表現(xiàn),因此物件導(dǎo)向資料庫(kù)在製造環(huán)境的適用性明顯優(yōu)於目前現(xiàn)有資料庫(kù)管理系統(tǒng)。物件資料管理產(chǎn)生了資料庫(kù)同步控制(concurrency control)和復(fù)原(recovery)上的新問(wèn)題,因?yàn)镺DMS提供使用者在執(zhí)行交易時(shí)的新同步需求:物件資料可以被長(zhǎng)時(shí)間的讀取,同一物件的不同版本(version)可以同時(shí)儲(chǔ)存在一個(gè)資料庫(kù)之中,進(jìn)而產(chǎn)生Version control的議題。在關(guān)連式系統(tǒng)中,提供同步控制和復(fù)原兩種機(jī)制來(lái)控制商業(yè)應(yīng)用程式的交易處理。同樣地,ODMS也使用新的技巧如:版本控制來(lái)控制交易處理。第四章 綱要演進(jìn)(Schema evolution)4.1 綱要(Schema)綱要演進(jìn)(Schema evolution )是物件導(dǎo)向資料庫(kù)非常有用的功能之一,如果物件導(dǎo)向資料庫(kù)沒(méi)有綱要演進(jìn),對(duì)於物件導(dǎo)向資料庫(kù)的綱要(Schema),我們只能加入新的類別(Class),而不能重新定義已存在綱要裡的類別;假如使用綱要演進(jìn),我們可以重新修改資料庫(kù)裡的類別。例如:我們?cè)O(shè)計(jì)顧客資料庫(kù)時(shí),顧客姓名的物件欄位設(shè)六位字元,後來(lái)卻發(fā)現(xiàn)需要輸入八位字元的字,我們就可以使用綱要演進(jìn)將六位字元改成八位字元(如圖 3)。圖3 Schema是型態(tài)定義的集合,包括所定義的架構(gòu)及行為(A schema is a set of type definitions-including their definitions of the structure and the behavior.)傳統(tǒng)的資料庫(kù)產(chǎn)品對(duì)於現(xiàn)有的綱要(schema)改變只提供相當(dāng)簡(jiǎn)單的功能。如對(duì)現(xiàn)有的關(guān)聯(lián)(relation)加上一個(gè)新的屬性(欄位)等等。不過(guò),有一些應(yīng)用需要複雜的綱要(Schema)來(lái)改變功能的支援,一些物件導(dǎo)向的雛形系統(tǒng)對(duì)這個(gè)問(wèn)題已有相當(dāng)深度的研究。這個(gè)問(wèn)題在物件導(dǎo)向的環(huán)境裡比在關(guān)聯(lián)式資料庫(kù)的環(huán)境裡更加複雜,原因是物件導(dǎo)向資料庫(kù)的綱要比關(guān)聯(lián)式資料庫(kù)更為複雜。大部份的ODMS並不提供對(duì)現(xiàn)存綱要程式的修改。在某些狀況下,綱要的改變會(huì)自動(dòng)的反應(yīng)到相關(guān)的物件。藉由綱要定義架構(gòu)(schema definition frame)可以來(lái)說(shuō)明綱要(Schema)是由它自己的subschema所組成,如下幾何學(xué)的schema表示法:schema Geometry issubschema CSG;subschema BoundaryRep;end schema Geometry;schema BoundaryRep istype Cuboid is ;type Surface is ;type Edge is ;type Vertex is ;var exampleCuboid: Cuboid;end schema BoundaryRep;一般schema也為包含actual type definitions,且上面這個(gè)例子使用schema BoundaryRep來(lái)定義變數(shù)exampleCuboid。4.2 綱要改變的分類ODBMS會(huì)自動(dòng)維護(hù)你在綱要中所指定關(guān)聯(lián)的參考完整性,如刪除屬性以及superclass,ODMS會(huì)自動(dòng)反應(yīng)。另外,新增一個(gè)屬性欄位和Superclass,只要當(dāng)default value屬性值可以接受,ODMS也會(huì)自動(dòng)反應(yīng)。舉例來(lái)說(shuō),你刪除一個(gè)Student物件,ODMS將自動(dòng)消除該Student物件到所有Course物件的link,也會(huì)自動(dòng)消除所有Course物件到該Student物件的link。Banerjee在1987年定義了一些綱要改變的分類,以下我們將針對(duì)這些分類作一說(shuō)明:1. 改變類別中型態(tài)的元件(修改類別中的屬性定義)1.1 改變屬性1.1.1 新增一個(gè)屬性1.1.2 刪除一個(gè)屬性1.1.3 改變屬性名稱1.1.4 改變屬性型態(tài)1.1.5 繼承一個(gè)不同的屬性定義1.2 改變方法1.2.1 新增一個(gè)方法1.2.2 刪除一個(gè)方法1.2.3 改變方法名稱1.2.4 改變方法的實(shí)作1.2.5 繼承一個(gè)不同的方法之定義1.3 改變關(guān)係2. 改變類別階層(修改類別間的繼承關(guān)係)2.1 新增一個(gè)父類別/子類別關(guān)係2.2 刪除一個(gè)父類別/子類別關(guān)係2.3 改變繼承順序(在多元繼承系統(tǒng)才存在)3. 改變類別本身(修改與刪除資料庫(kù)中的類別)3.1新增一個(gè)類別3.2刪除一個(gè)類別3.3改變類別名稱l 修改類別中的屬性定義:該改變的屬性也會(huì)改變到所有下屬的子類別當(dāng)中,改變方法就是指改變類別的運(yùn)算方法;但是要注意到修改屬性預(yù)設(shè)值,只能在原宣告類別中做,不可以在任何其他子類別中對(duì)此繼承所得的屬性做預(yù)設(shè)值的修改;改變類別屬性的預(yù)設(shè)值,相當(dāng)於對(duì)該屬性做更新的動(dòng)作一般。l 修改類別間的繼承關(guān)係:新增類別關(guān)係就是在現(xiàn)有類別之上宣告另一個(gè)類別為其父類別,這樣該class及其底下所有子類別就會(huì)繼承所有superclass(父類別)上的屬性與運(yùn)算方法。l 修改與刪除資料庫(kù)中的類別:新增類別時(shí),與關(guān)聯(lián)式資料庫(kù)最大不同點(diǎn)在於OODB可以放置集合式的資料,以便讓使用者可以一次將集合式的資料(SET)加到集合型態(tài)的屬性中。4.3 綱要修改四個(gè)主要方法在很多情況下,綱要演進(jìn)是很重要的問(wèn)題且相當(dāng)複雜,因?yàn)闀?huì)遇到父/子類別關(guān)係上的衝突,以下是當(dāng)綱要修改時(shí)維護(hù)資料實(shí)例(data instance)正確的四個(gè)主要方法:l Write-once types:這是最簡(jiǎn)單的一種方法,當(dāng)型態(tài)(type)已經(jīng)建立實(shí)例(instances)則不允許再修改綱要內(nèi)容。假如使用者希望新增一個(gè)屬性到綱要內(nèi)容,則系統(tǒng)將建立一個(gè)新的型態(tài)並將舊有資料複製到新型態(tài)去。l Immediate update:在這個(gè)方法下,當(dāng)綱要的內(nèi)容修改後將立即影響到原有型態(tài)下的現(xiàn)存資料(existing data)。例如:假設(shè)新增一個(gè)屬性到某一物件型態(tài)中,則原有型態(tài)下現(xiàn)存的所有物件都將自動(dòng)地新增此一屬性並將其設(shè)為null值。這種方式是目前大部份ODMS產(chǎn)品所使用的方式。l Lazy update:這種方法的處理方式是,當(dāng)綱要的內(nèi)容修改時(shí),將延緩對(duì)原有型態(tài)下現(xiàn)存物件的修改,直到物件下一次被使用時(shí)一併修改。當(dāng)物件被抓到主記憶時(shí),一個(gè)物件的標(biāo)籤將指示系統(tǒng)該物件是否已修改過(guò),若否,則同時(shí)進(jìn)行修改。在這種方式下,系統(tǒng)必須儲(chǔ)存舊有的綱要資訊及程序內(nèi)容直到所有的物件都修改完成。l Schema mapping:這是一種最極端的作法,當(dāng)綱要的內(nèi)容修改時(shí),將無(wú)限期地延緩對(duì)原有型態(tài)下,現(xiàn)存物件的修改或直到要求重新組織(reorganization)時(shí)為止。系統(tǒng)必須維護(hù)新舊型態(tài)間的對(duì)應(yīng)(mapping)。和Lazy update的作法一樣,系統(tǒng)必須同時(shí)維護(hù)多個(gè)版本的綱要。綱要對(duì)應(yīng)(schema mapping)是很困難的,所以目前尚未有系統(tǒng)採(cǎi)用此一方式。第五章 物件版本管理(Object versions)5.1 版本管理在任何資料庫(kù)系統(tǒng)於多人同時(shí)使用資料資料庫(kù)的情況下,資料處理(Transaction)必須具有支援單元性(Atomicity)、一致性(Consistency Preservation)、隔絕性(Isolation)及持久性(Durability)四項(xiàng)特性才能夠保證在任何情況下,維持資料被多人共用時(shí)的正確性。這樣的非獨(dú)立性的資料處理方式在執(zhí)行過(guò)程中須相互等待,因此資料庫(kù)系統(tǒng)在資料的存取處理不能持續(xù)太長(zhǎng)的時(shí)間,否則整體效率將降低。許多應(yīng)用軟體都需要物件的多版本管理概念,來(lái)進(jìn)行軟體開(kāi)發(fā)。例如,軟體發(fā)展,硬體設(shè)計(jì),文件建立等等。目前有一些物件導(dǎo)向系統(tǒng)已有支援,這些支援通常包括:建立某物件之新版本能力。設(shè)立某一物件版本成為目前資料庫(kù)的版本。刪除過(guò)時(shí)老舊的版本。查詢某物件的版本歷史。注意,物件版本的歷史並不一定是直線式的,下圖為一般版本管理的歷史圖,其中版本V.2分裂為兩個(gè)不同的版本V.3a及V.3b,然後再合併成為版本V.4。圖4當(dāng)我們有許多物件的不同版本及版本歷史時(shí),一個(gè)明顯的問(wèn)題便是我們到底該使用那一個(gè)版本?例如說(shuō),當(dāng)一個(gè)物件有了更新版本時(shí),以前指向該物件的參考(reference)是該仍指向舊版本還是指向新版本?使用者查詢時(shí),是把那一個(gè)版本的物件給他?要回答這些問(wèn)題,便要談接下來(lái)會(huì)講到的組態(tài)(configuration)。5.2 物件導(dǎo)向資料庫(kù)版本管理物件導(dǎo)向資料庫(kù)應(yīng)用版本管理(Version Management )的方式,藉由版本的產(chǎn)生,讓使用者取得不同資料版本,以獲得對(duì)資料存取的獨(dú)立控制權(quán),而展現(xiàn)出物件導(dǎo)向資料庫(kù)在長(zhǎng)時(shí)間的資料處理的優(yōu)勢(shì)。長(zhǎng)時(shí)間資料處理具有兩個(gè)優(yōu)點(diǎn):允許多人可針對(duì)共用資料同時(shí)進(jìn)行不同的存取作業(yè),及資料可以被長(zhǎng)時(shí)間鎖定而不影響整體效率。因此,最能夠發(fā)揮版本管理優(yōu)點(diǎn)的環(huán)境,即是對(duì)多項(xiàng)作業(yè)並行且必須長(zhǎng)時(shí)間對(duì)資料進(jìn)行存取鎖定的環(huán)境。在版本管理的過(guò)程尚需要三項(xiàng)重要的概念組態(tài)(Configuration)、工作空間(Workspace)和版本管理之運(yùn)作。以下將對(duì)這三項(xiàng)概念分別詳述l 組態(tài)(Configuration):物件導(dǎo)向資料庫(kù)中所儲(chǔ)存的資料置於物件之內(nèi),所以產(chǎn)生新舊的版本乃是對(duì)物件而言。物件產(chǎn)生了新舊版本時(shí),同時(shí)衍生了物件間新舊版本的對(duì)應(yīng)問(wèn)題,新版本與舊版本之間的差異在於物件內(nèi)的屬性值更動(dòng)。所謂的組態(tài)(configuration)是由資料庫(kù)中,各個(gè)物件的某一版本所形成的組合體(當(dāng)然這些版本間的關(guān)係必須協(xié)調(diào)一致),換句話說(shuō),組態(tài)即整體資料庫(kù)的版本。組態(tài)具有兩個(gè)功能:版本管理的基本單位及自動(dòng)紀(jì)錄各物件間版本之間的對(duì)應(yīng)問(wèn)題。如下:1. 版本管理的基本單位:也就是說(shuō)系統(tǒng)提供一些基本的組態(tài)管理機(jī)制,讓使用者根據(jù)這些機(jī)制,而建構(gòu)自己的組態(tài)管理策略。例如說(shuō),在物件導(dǎo)向資料庫(kù)Objectivity/DB中,它提供了三種機(jī)制:l MOVE:若物件有一個(gè)新的版本產(chǎn)生時(shí),組態(tài)便會(huì)使用新版本的物件,而不再使用舊版本。l DROP:若物件有一個(gè)新的版本產(chǎn)生時(shí),組態(tài)仍會(huì)使用舊版本的物件,而不使用新版本。l COPY:若物件有一個(gè)新的版本產(chǎn)生時(shí),組態(tài)便會(huì)同時(shí)使用新舊版本的物件。2. 自動(dòng)紀(jì)錄各物件間版本之間的對(duì)應(yīng):系統(tǒng)自動(dòng)提供一整套的組態(tài)管理策略。例如說(shuō),在物件導(dǎo)向資料庫(kù)ObjectStore中,它把組態(tài)視為資料庫(kù)的快照Snapshot,只是這個(gè)快照的內(nèi)容可以讓使用者修改,我們把它的做法歸納如下:l 我們用一種特別的組態(tài)物件代表資料庫(kù)的組態(tài)。l 使用者在每次操作時(shí),可開(kāi)啟任何一個(gè)現(xiàn)存的或新的組態(tài)物件以作為資料庫(kù)的現(xiàn)在組態(tài)。l 當(dāng)有新的物件版本產(chǎn)生時(shí),我們會(huì)加上標(biāo)記以記錄該物件是在那一個(gè)組態(tài)被產(chǎn)生。當(dāng)使用者讀取物件時(shí),我們會(huì)根據(jù)現(xiàn)在組態(tài)而決定該讀入那一個(gè)版本的物件。組態(tài)可視為容器,將一群相關(guān)物件放入組態(tài)成為群體,作為版本管理時(shí)的基本單位,而取用物件即是以組態(tài)為基本單位,而不再是一個(gè)個(gè)分散的物件。使用組態(tài)的概念不僅在物件版本在更新的過(guò)程中能夠自動(dòng)產(chǎn)生對(duì)應(yīng)的紀(jì)錄,使得未來(lái)在物件新舊版本的取用在對(duì)應(yīng)上不會(huì)發(fā)生對(duì)應(yīng)錯(cuò)誤的問(wèn)題,同時(shí)也提供了將物件依其相關(guān)程度做分類而形成存取單位,使使用者輕鬆的取用到所有相關(guān)的物件。使用組態(tài)必須先對(duì)該組態(tài)定義其功能及包含範(fàn)圍,而組態(tài)的定義則必須依據(jù)設(shè)計(jì)物件(Design Object)的概念。階層式的類別關(guān)係中,上階層的類別即為所謂的設(shè)計(jì)物件。以汽車引擎為例,汽車的引擎部分由許多零件所構(gòu)成,引擎屬於上階層,因此引擎這個(gè)設(shè)計(jì)物件即可用來(lái)當(dāng)成組態(tài),成為版本管理運(yùn)作時(shí)的基本單位。l 工作空間(Workspace):要讓使用者取得個(gè)別資料卻不相互干擾,這種使用者各自具有個(gè)別作業(yè)空間的概念,稱為“工作空間”(Workspace )。工作空間主要的功能,在於能夠提供使用者在進(jìn)行資料修改時(shí)獨(dú)自運(yùn)作的空間,其正在進(jìn)行修改組態(tài)的物件內(nèi)容並不會(huì)讓別人看見(jiàn),提供了隱密性,並提供對(duì)所需專案資料適當(dāng)且具有完整版本進(jìn)化連貫性的能見(jiàn)度(Visibility)避免不必要的資料相互交錯(cuò)干擾。工作空間之間具有階層的關(guān)係,一個(gè)工作空間之下可以有數(shù)個(gè)子工作空間,上面的工作空間稱為父工作空間(Parent Workspace),相對(duì)於上方的工作空間,下方的工作空間則稱為子空間(Child Workspace),而工作空間所構(gòu)成的階層數(shù)則可視情況而定,可以只有兩層,亦能多達(dá)數(shù)層。l 版本管理之運(yùn)作:使用者必須先取得相關(guān)物件才能進(jìn)一步修改更新。在資料存取的過(guò)程中,所有資料庫(kù)內(nèi)的物件必存放於一個(gè)具父親的角色的整體工作空間(Global Workspace)的位置,其下有數(shù)個(gè)子工作空間(見(jiàn)圖 4)。使用者欲取得與其相關(guān)之組態(tài)進(jìn)行設(shè)計(jì)修改,則必須向父工作空間提出要求,以取出組態(tài)至本身所在的子工作空間,方便下一步階段修改的進(jìn)行,這種從父工作空間取出資料的動(dòng)作稱為登記取出(Check-out)。此外,一個(gè)工作空間可以包含數(shù)個(gè)組態(tài),也就是說(shuō)子工作空間可以向父工作空間同時(shí)取用多個(gè)不同組態(tài)。登記取出(Check-out)動(dòng)作允許由多位於不同工作空間的成員同時(shí)進(jìn)行,且各成員所取出組態(tài)可以不相同。由於使用者使用資料時(shí),往往會(huì)遇到多個(gè)使用者同時(shí)對(duì)一個(gè)組態(tài)進(jìn)行物件屬性值修改動(dòng)作的狀況,需要紀(jì)錄不同的修改過(guò)程,而版本管理亦能夠滿足此項(xiàng)需求,由多位使用者針對(duì)某一特定組態(tài)登記取出,以進(jìn)行多方同步修改資料。綜合上述,這樣的版本管理的運(yùn)作架構(gòu),在組態(tài)取用方面可分為兩種狀況一是使用者各自取用各自所需組態(tài),另一則是取用同一組態(tài),同步地進(jìn)行資料修改,這種多方取用同一組態(tài)的方式,稱為版本分支(Version Branching)。資料登記取出(Check-out)的動(dòng)作,代表此組態(tài)的物件內(nèi)容將被進(jìn)行修改,而為了保留之前的物件內(nèi)容,不希望在修改之後,失去原有物件內(nèi)容,應(yīng)用版本(Version)概念,以版本歷史圖(Version History Graph)記載該項(xiàng)組態(tài)版本的發(fā)展紀(jì)錄,因此在組態(tài)取出的同時(shí),也一併進(jìn)行版本歷史圖的版本登記工作。完成組態(tài)中物件內(nèi)容的更新後,必須將發(fā)展出來(lái)的新版本登記放回(Check-in)父工作空間以表示完成作業(yè),這個(gè)動(dòng)作也會(huì)一併將這個(gè)新版本公佈,讓其他子空間的使用者看到。由於登記取出(Check-out)可分為兩種方式,所以在登記放回(Check-in)的方式也有兩種。若是以單一使用者取用的方式,則完成的修改以登記放回的方式處理,可是若採(cǎi)用多個(gè)使用者同時(shí)取用之版本分支方式,則在修改的過(guò)程除了用登記放回的方式,也可以在修改至最後的結(jié)果與原先的版本進(jìn)行版本合併(Version Merging)的動(dòng)作選取進(jìn)行合併兩個(gè)版本中的資料,合併成為新的版本方案(如下圖 5:版本管理運(yùn)作圖)。圖 5:版本管理運(yùn)作圖第六章 交易控制(Transactions control)物件資料管理產(chǎn)生了資料庫(kù)同步控制(concurrency control)和復(fù)原(recovery)上的新問(wèn)題,因?yàn)镺DMS提供使用者在執(zhí)行交易時(shí)新的同步需求:物件資料可以被長(zhǎng)時(shí)間的讀取,同一物件的不同版本可以同時(shí)儲(chǔ)存在一個(gè)資料庫(kù)之中。在關(guān)連式系統(tǒng)中,提供同步控制和復(fù)原兩種機(jī)制來(lái)控制商業(yè)應(yīng)用程式的交易處理。同樣地,ODMS也使用新的技巧如:版本,來(lái)控制交易處理。6.1同步和復(fù)原概念物件導(dǎo)向系統(tǒng)的交易管理控制通常比傳統(tǒng)的交易管理控制來(lái)的更為複雜。通常物件資料庫(kù)是應(yīng)用在工程開(kāi)發(fā)上,其複雜交易可能延續(xù)數(shù)小時(shí)或數(shù)天,而傳統(tǒng)的交易僅需幾個(gè)百分之一或千分之一秒即可完成。所以:l 交易的rolling back:如果每次都是從交易開(kāi)始的那一點(diǎn)為起始點(diǎn)的話,可能會(huì)產(chǎn)生對(duì)使用者無(wú)法接受的大量工作的損失。l 傳統(tǒng)鎖定的使用可能會(huì)引起無(wú)法接受的延遲(為了等待鎖定結(jié)束)。第一點(diǎn)指出了物件導(dǎo)向的交易管理需要partial rollbacks,而第二點(diǎn)指出了物件導(dǎo)向的交易管理需要非鎖定(nonlocking)的並行處理控制機(jī)能。在長(zhǎng)時(shí)間交易(long transaction)以及巢狀交易(nested transaction)的處理上我們都需要應(yīng)用這兩點(diǎn)的概念。以下我們針對(duì)這兩種交易形態(tài)進(jìn)行解說(shuō):1.長(zhǎng)時(shí)間交易(Long transaction):由於教一時(shí)間越長(zhǎng),越容易發(fā)生存取衝突與中斷。因此在這裡,儲(chǔ)存點(diǎn)(savepoint)概念提供了partial rollback的功能。所謂的儲(chǔ)存點(diǎn)是說(shuō):對(duì)於一個(gè)長(zhǎng)時(shí)間的交易,我們可以在中間設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025勞動(dòng)合同與就業(yè)協(xié)議書(shū)的差異與關(guān)聯(lián)
- 2025技術(shù)培訓(xùn)合同書(shū)范本
- 2025企業(yè)設(shè)備升級(jí)借款合同示例
- 2025定制、部署軟件合同
- 2025私募股權(quán)合作合同協(xié)議
- 公告聯(lián)合申報(bào)協(xié)議書(shū)
- 共同貸款還款協(xié)議書(shū)
- 辦公器材采購(gòu)協(xié)議書(shū)
- 2025員工無(wú)薪留職合同
- 農(nóng)村互換果樹(shù)協(xié)議書(shū)
- 【橡膠工藝】-橡膠產(chǎn)品生產(chǎn)工藝規(guī)程
- 推銷實(shí)戰(zhàn)技巧與客戶優(yōu)秀服務(wù)技巧
- 福建新費(fèi)用定額交底材料
- 器質(zhì)性精神障礙患者的護(hù)理
- 趣味英語(yǔ)課件完整版
- 大學(xué)武術(shù)智慧樹(shù)知到答案章節(jié)測(cè)試2023年浙江大學(xué)
- 前列腺增生癥患者圍手術(shù)期的護(hù)理
- 五防系統(tǒng)調(diào)試報(bào)告
- 日語(yǔ)綜合教程第六冊(cè) 單詞表
- 市委政研室主任關(guān)于如何寫(xiě)稿子的講話
- 在建項(xiàng)目雨季施工(防汛)安全隱患排查表
評(píng)論
0/150
提交評(píng)論