物件數據庫
物件數據庫是一種以物件形式表示信息的數據庫。物件數據庫的數據庫管理系統被稱為ODBMS或OODBMS。
兩個主要原因讓用戶使用物件數據庫技術。首先,關係數據庫在管理複雜數據時顯得笨重。其次,被應用軟件操作的數據一般是用物件導向的程式語言如C++, Java, Delphi和C#寫成,而那些用來轉化數據表示和關係數據庫元組的代碼很冗繁,執行時也有不少耗時。這種應用程式和數據庫表示信息的模式之間的不匹配有時也被稱為impedance mismatch。
歷史
編輯物件數據庫管理系統,發端於1970年代早中期為支持對圖結構物件的原生數據庫管理而開展的研究。「物件導向數據庫系統」這一術語第一次出現於1985年。著名的研究項目包括Encore-Ob/Server(布朗大學),EXODUS(Wisconsin大學),IRIS(惠普),ODE(Bell實驗室),ORION(MCC), Vodak(GMD-IPSI)和Zeitgeist(Texas Instruments)。其中以ORION項目發表的論文數為最多。MCC的Won Kim將這些論文中最有價值的一部分匯編成書並由MIT出版社出版。
物件數據庫管理系統為物件導向程式語言增加了持久的概念。早期的商品數據庫集成了多種語言:GemStone(Smalltalk)、Gbase(Lisp)和Vbase(COP)。COP即「 C Object Processor」(C物件處理器),是一種基於C的專有語言,比C++早。1990年代大部分時間裏,C++統治着商用物件數據庫管理系統市場。廠商在1990年代晚期加入了Java並於最近加入了C#。
物件數據庫的採納
編輯基於持久編程的物件數據庫在一些應用領域獲得了認可,如工程和空間數據庫,通信和科學領域如高能物理和分子生物。他們對主流的商業數據處理沒有什麼影響,儘管獲得了一些應用在部分特殊領域如金融服務。值得指出的是:物件數據庫保持着「世界上最大的數據庫(超過1000Terabytes在斯坦福線性加速中心)和最高攝取率(一Terabyte每小時)」的記錄。
2004年以來,當出現了易用和普遍可支付的開放原始碼物件數據庫時,物件數據庫進入了第二次增長期。這些開放原始碼的物件數據庫完全用OOP語言如Java,C++,或C#寫出。ObjectDB是物件關係數據庫的一個例子。
技術特性
編輯在純物件式資料庫中,資料以物件的形式存儲,這些物件只能由其所屬的類別中定義的方法來操作。物件被組成一種類別型層次(有時是格式lattic),子類別繼承其超類別的特性。物件中可以有到其他物件的引用,於是應用程式可以以一種導航式的編程風格訪問數據。
多數物件式資料庫也提供了一些查詢語言,允許用定義式編程訪問物件。在物件查詢語言以及查詢和導航接口的集成領域,產品間出現了很大的區別。ODMG用物件查詢語言OQL作了標準化的嘗試。
訪問數據可以更快,表的聯合常常是不必要的(在關係數據庫的表實現方式下)。這是因為無需查詢只需通過指針(Pointer)就可以直接獲得物件。
產品間的另一點不同是數據庫定義模式的方式。然而一般的特徵是程式語言和數據庫模式使用相同類別型的定義。
多媒體應用程式將變得容易因為與數據相關的類別方法保證了數據的正確解釋。
許多物件數據庫提供對版本的支持。一個物件可以看作是他所有版本的集合。同時,物件版本也可以被看作是物件自身的屬性。一些物件數據庫也提供了對觸發器和約束的語義支持,這些特性是活躍數據庫(active database)的基礎。
優勢和劣勢
編輯對ODBMS和關係DBMS的基準測試顯示ODBMS在某些任務上優勢明顯。主要原因是許多操作使用導航式而不是定義式接口,並且對數據的導航式訪問通常可以有指針高效的實現。
對基於導航數據庫技術,如ODBMS的批評指出,基於指針的技術為一些特殊的搜索路徑或視點(viewpoint)作了優化。而且,對一般目的的查詢,基於指針的技術比關係型要慢並難於形式化。導航式顯得適合於特定應用而失了普遍,未來的使用。
ODBMS的其他技術,顯得缺失了與SQL世界中大量工具或特性的互操作性,包括但不限於產業標準互聯性,報告工具,OLAP工具以及備份和恢復標準。另外,不像關係數據庫,物件數據庫缺少形式化的數學基礎,而這反過來導致他們在查詢支持上的弱勢。不過,這一缺陷被部分彌補,因為一些ODBMS除了導航式訪問外也提供了對SQL的完全支持,如Objectivity/SQL++。
事實上,在概念封裝,即隱藏數據,使他只能通過公佈的一些接口訪問和關係數據庫技術假定:數據只能由基於數據內容的查詢,而不是預定義的查詢路徑的形式訪問之間,存在着本質的張力。
數據庫中心論,傾向於用定義和屬性驅動的觀點看世界,而物件導向傾向於從行為的觀點看世界。這就是圍繞着OOP和數據庫的許多impedance mismatch問題之一。
儘管很多評論認為物件數據庫是失敗的,但主要的辯護者仍很活躍,更緊密地整合數據庫的功能和物件程式語言的嘗試在研究和產業社區里仍在繼續。