オブジェクトデータベース
出典: フリー百科事典『ウィキペディア(Wikipedia)』
データベースモデル |
---|
基本的なモデル |
その他のモデル |
多次元 |
オブジェクトデータベースは、オブジェクト指向プログラミングで使うオブジェクトの形式で表現されるデータを格納するデータベースである。 オブジェクト指向データベースともいう。オブジェクト指向プログラミングにおいて、オブジェクトをデータベースに格納(永続化)する方法の一つである。オブジェクトデータベースは、オブジェクト指向プログラミング言語と密接に連携する。 オブジェクトデータベースのデータベース管理システム (DBMS) を、
- オブジェクトデータベース管理システム (ODBMS; Object DBMS) 、あるいは
- オブジェクト指向データベース管理システム (OODBMS; Object Oriented DBMS) という。
データベースの能力とオブジェクト指向プログラミングの能力が結びついて開発された技術が ODBMS である。
この項目ではオブジェクトデータベース と ODBMS (オブジェクトデータベース管理システム) を中心に説明する。
目次 |
[編集] 概要
ODBMS (オブジェクトデータベース管理システム) の実装を使うと、データベースに格納されたオブジェクトを一つもしくは複数のオブジェクト指向プログラミング言語のプログラミング言語のオブジェクトとして継ぎ目なしに利用できる。 また、ODBMSはオブジェクト指向プログラミング言語に次の機能を備えるよう拡張した技術と位置づけることができる。
ODBMS の実装のいくつかは、Smalltalk、C++、Java、C#、Visual Basic .NET などのオブジェクト指向プログラミングと連携して良好に動作するよう設計されている。 別の ODBMS の実装のいくつかは、その ODBMS 独自のプログラミング言語をもつ。 ODBMS はデータモデルとしてオブジェクト指向プログラミング言語と厳密に同じモデルを採用している。
オブジェクトデータベース (ODBMS) は、一般的には、複雑なデータの高速処理のビジネス要求がある際に、勧められるとされる。
データベース技術にオブジェクト指向の概念を導入する手法には、後述するように、オブジェクトデータベースとオブジェクト関係データベースの2つの手法がある。
ODBMS (オブジェクトデータベース管理システム) の実装としては、ObjectStore、Caché、Objectivity/DB、GemStone、db4oなどがある。
[編集] 歴史
[編集] ODBMSの研究開発
ODBMS (オブジェクトデータベース管理システム) の技術は、1970年代半ばの、DBMS (データベース管理システム) で、グラフ構造をなすオブジェクト群を扱うための本格的な機能を開発する研究から、発展してきた。 「オブジェクト指向データベースシステム」という用語が最初に現れたのは1985年頃である。 特筆すべき研究プロジェクトとしては次のようなものがある。
- Encore-Ob/Server (ブラウン大学)
- EXODUS (ウィスコンシン大学)
- IRIS (ヒューレット・パッカード)
- ODE (ベル研究所)
- ORION (Microelectronics and Computer Technology Corporation; MCC)
- Vodak (GMD-IPSI)
- Zeitgeist (テキサス・インスツルメンツ)
ORION プロジェクトに関しては、他のどのプロジェクトよりも多くの論文が書かれた。 MCC に在籍していたウォン・キムは、優れた一連の論文を一冊の本にまとめて MIT Press から出版した[1]。
最初期の ODBMS の商用実装としては次のようなものがあった。
- GemStone (Servio Logic 後に GemStone Systems に社名を変更する)
- Gbase (Graphael)
- Vbase (Ontologic)
1990年代前半にはさらに次のような製品 (商用実装) が ODBMS 市場に参入した。
- ITASCA (Itasca Systems)
- Jasmine (富士通、CAが販売)
- Matisse (Matisse Software)
- Objectivity/DB (Objectivity, Inc. 日本ではオージス総研が販売)
- ObjectStore (Progress Software、eXcelon社から買収した。またeXcelon社の旧社名は Object Design であった)
- ONTOS (Ontos, Inc. 旧社名は Ontologic)
- O2[2] (O2 Technology、この会社はいくつかの会社と合併し、 Informix社に買収され、さらにそのInformixはIBMに買収された)
- POET (Versant FastObjects、もともとは Poet Systems が開発販売していたが Versant が買収した)
- Versant Object Database (Versant Corporation)
ここで挙げた製品のいくつかは、現在も ODBMS 市場で開発販売を続けている。
ODBMS は、オブジェクト指向プログラミング言語に永続化の機能を追加する。 初期の ODBMS 実装は、さまざまな言語に永続化機能を追加して統合した。
1990年代のほとんどの期間においては、C++ が ODBMS 市場において支配的な言語であった。 1990年代末期には、商用の ODBMS 開発企業は Java に対応し、さらに近年では C# にも対応するようになった。
[編集] ODBMSの必要性
データベースを使う人々にとっては、ODBMS (オブジェクトデータベース管理システム) を必要とする背景には、主に2つの要因があった。
- 従来の関係データベースで複雑な構造をもつデータを扱うことは、煩雑で能率が悪く扱いにくいということが、データベースに携わる人々に意識されるようになってきた。
- 近年、データを扱うアプリケーションソフトウェアをオブジェクト指向プログラミング言語 (Smalltalk や C++、Java、Delphi、Ruby、Python、C# など) によって記述することが多くなってきた。
このような状況で関係データベースを使うと、アプリケーションソフトウェアで、オブジェクトとして表現されたデータと関係モデルに基づく関係データベースの関係 (テーブル構造) のデータを相互に変換する処理を、プログラマが自分で記述する必要がある。プログラマにとってそのような作業は退屈でうんざりさせられるものであり、開発生産性が悪く、開発されたソフトウェアの実行速度も遅くなる傾向がある、などのデメリットがある。
こうした、オブジェクト指向プログラミング言語で記述されたアプリケーションソフトウェアと関係データベース (関係モデル) の間の不整合を、インピーダンスミスマッチと呼ぶことがある。インピーダンスミスマッチを軽減する技術として、この項目で説明するオブジェクトデータベースと、オブジェクトリレーショナルマッピングがある。
[編集] ODBMSを採用する動き
1990年代の初めに、データベースにオブジェクト指向の概念を導入するという課題は、情報技術の研究者や新興企業の人々の中心に、広く関心を持たれるようになった。
データベースにオブジェクト指向の概念を導入するために、さまざまな手法が採られてきた。これらの手法は、2つのグループに分類することができる。
- オブジェクトデータベース: 従来のプログラミング言語もしくは新規に開発するプログラミング言語に、永続化の機能を追加する。
- オブジェクト関係データベース: 従来の関係データベースにオブジェクト指向の機能(カプセル化や継承など)を追加する。
オブジェクトデータベース (ODBMS) はいくつかの分野で使われてきた。工学データベース、空間データベース、電気通信のデータベース、高エネルギー物理学や分子生物学(バイオインフォマティクス)など自然科学の分野のデータベースとして、使われてきた。これまではオブジェクトデータベースは、商用のデータ処理にはあまり使われてこなかった。しかし現在では、金融業のいくつかの特定分野において使われる事例がでてきている。 オブジェクトデータベースは、現在、世界最大の容量のデータベースという記録を保持している。 スタンフォード線形加速器センターで 1000 テラバイト以上のオブジェクトデータベースが運用されている ("Lessons Learned From Managing A Petabyte") 。 またこのデータベースは、1日で1テラバイト以上という非常に高いデータ増加ペースという記録ももっている ("High Ingest Benchmark Description") 。 いくつかの ODBMS は、機器やパッケージソフトウェアやリアルタイムシステムへの組み込みの用途を想定している。
一方、オブジェクト関係データベース (ORDBMS) は広く使われるようになったが、単なる関係データベース (RDBMS) として使われる傾向があり、現時点ではそのオブジェクト指向の機能を積極的に活用する事例はあまり多くない。オブジェクト関係データベースでは、データ操作言語として、関係データベースの述語論理に基づいた宣言型の言語(SQL)を引き継いでいる。「オブジェクト関係データベース」という用語は、マイケル・ストーンブレーカーが命名した。オブジェクト関係データベースはハイブリッドデータベースと呼ばれることもある。従来の関係データベース (RDBMS) を開発してきた企業(ベンダ)の多くが、オブジェクト関係データベース (ORDBMS) の手法を採用し、もしくはオブジェクト関係データベースの開発企業を買収した。こうした関係データベースの開発企業は、自社の関係データベースにオブジェクト指向の拡張を行った。 オブジェクト関係データベース (ORDBMS) の実装としては、PostgreSQL、Informix (Illustra)、IBM DB2 UDB、Oracle Database などがある。
2004年から、オープンソースの ODBMS (オブジェクトデータベース管理システム) が注目されるようになり、ODBMS は第2の成長期に入っている。こうした ODBMS は、オープンソースであるため少ない費用で導入できる。また ODBMS 自体がJavaやC++、Python、C#のようなオブジェクト指向プログラミング言語によって全て実装されている。 オープンソースの ODBMS としては db4o (db4objects) や Perst (McObject) などがある。 さらに最近では Magma というオープンソースの ODBMS が開発されている。 Magma は、Smalltalk環境の一種であるSqueakで実装されている。
[編集] 技術面の特徴
ODBMS (オブジェクトデータベース管理システム) では、オブジェクト指向の考え方を純粋な形で採用しており、データはオブジェクトとしてデータベースに格納(永続化)される。オブジェクトはカプセル化されている。オブジェクトに対しては、その設計図であるクラスで定義されたメソッドを介してのみ、扱うこと (オブジェクトの状態を参照・変更することなど) ができる。オブジェクトはなんらかのタイプ (型) をもつ。おのおののタイプの間には継承関係がある。あるタイプを継承して、そのタイプの特性を引き継いだ別のタイプを定義することができる。継承元となるタイプをスーパータイプといい、継承先のタイプをサブタイプという。スーパータイプを継承してサブタイプが定義される。サブタイプは、単一のスーパータイプのみもつことができる場合と、複数のスーパータイプをもつことができる場合とがある(オブジェクト指向プログラミング言語により異なる)。
アプリケーションソフトウェアは、ナビゲーショナルな方法で、オブジェクトデータベースに格納されているオブジェクトへの参照を取得することができる (ナビゲーショナルデータベース) 。オブジェクトは、他のオブジェクトへの参照をもつことができる。これを利用して、アプリケーションソフトウェアは、別のオブジェクトへの参照を取得するために、オブジェクト間の参照関係をたどって目的とするオブジェクトへの参照を取得することができる。
多くの ODBMS (オブジェクトデータベース管理システム) では、オブジェクトデータベースに格納されているオブジェクトへの参照を取得するための、別の方法として、宣言的なデータ操作言語(オブジェクト問い合わせ言語)による方法も使うことができる。オブジェクト問い合わせ言語については、後述するODMGの標準 (OQL; Object Query Language) が策定されているが、実際には ODBMS ごとに差異がある。またオブジェクト問い合わせ言語による方法とナビゲーショナルな方法の、2つの方法のインタフェースの統合のしかたについても、ODBMS ごとに違いがある。
ODBMS の検索速度は、関係 (テーブル構造) で実装する RDBMS (関係データベース管理システム) と比較すると、速くなる可能性がある。これは ODBMS では、RDBMS とは異なり、結合 (join) のような処理を行うことはほとんど無く、またオブジェクトの参照をたどるという直接的な方法で目的とするオブジェクトへの参照を取得することができるからである (「結合」はポインタをたどる過程の高水準の抽象であると主張されることがある) 。
一般的には、オブジェクトデータベースのスキーマと、オブジェクト指向プログラミング言語は、同じタイプ定義を使う。ただし、ODBMS ごとに微妙な違いがある。
オブジェクトデータベースを有効に使うと、マルチメディアを扱うアプリケーションソフトウェアを、比較的容易に開発することができる。マルチメディアの音や映像などのコンテンツは、オブジェクトとして扱われる。そのため、コンテンツを符号化(エンコード)したり復号(デコード)したりすることなどのコンテンツの種類に特有な処理を、そのオブジェクトのメソッドに任せることができ、アプリケーションソフトウェア側で処理する必要は無い。
多くの ODBMS (オブジェクトデータベース管理システム) では、バージョニングのサポートを提供している。オブジェクトの状態の全ての変更履歴(バージョンの履歴)を確認することができる。オブジェクトの各バージョンもまた、オブジェクトとして扱うことが可能である。
いくつかの ODBMS ではまた、アクティブデータベースの基本的な機能である、トリガや制約のシステム的なサポートを提供している。
[編集] 特長と課題
ベンチマークによる性能比較では、いくつかの処理形態において、ODBMS (オブジェクトデータベース管理システム) が、 RDBMS (関係データベース管理システム) よりも、明らかに優れた性能を示してきている。その主な理由は、ODBMS は、その多くの処理を、宣言的な指示に基づいて実行するのではなく、ナビゲーショナルな指示に基づいて、実行しているからである。オブジェクトデータベースに対するナビゲーショナルなアクセスは、ほとんどの場合、参照をたどって目的とするデータ(オブジェクト)を取得するという性能面で有効な方法で実装されている[3]。
ODBMS などのナビゲーショナルデータベースの DBMS (データベース管理システム) に対する批判として、参照をたどってデータにアクセスする手法は、特定の「探索経路」もしくは視点に対して最適化されている、との意見がある。この意見によると、汎用的なデータ操作言語 (ODMGが策定したOQLなど) によるデータアクセスを行う場合、ODBMS のように参照をたどる手法は、RDBMS などと比較すると、処理速度が遅く、またデータ操作言語で検索式を記述することも簡単ではない、というデメリットがある。このように、ODBMS のようなナビゲーショナルな DBMS では、データベース構築時に想定していた用途に対してはアクセスが最適化され簡単になっているが、それは想定していなかったさまざまな用途でアクセスする場合のデメリットを犠牲にした上で実現されているという、見解がある。 (ただし参照ルートの最適化などを適用することができる可能性がある)
他に ODBMS に対して不利にはたらいているとみられる要素としては、多くのツールや機能について、相互運用性が低いことが挙げられる。RDBMS においては相互運用性をもつ多くのツールや機能がある。RDBMS では、例えば、データベースとアプリケーションソフトウェアとの接続について業界で標準化されており(JDBCやODBC)、帳票作成ツールやOLAPのツールがあり、バックアップと復旧(リカバリ)の標準がある。また ODBMS には、RDBMS と異なり、形式化された数学的な基盤がない。数学的な基盤がないことが、ODBMS におけるデータ操作言語のサポートに関して、不利にはたらいているとの批判がある。 しかしながら、現在ではこうした批判は必ずしも妥当ではないようである。 いくつかの ODBMS 実装では、ナビゲーショナルなアクセスに加え、完全な SQL によるアクセスも提供している (例えば、Objectivity社は Objectivity/SQL++ というソフトウェアを提供しており、これは同社製の ODBMS である Objectivity/DB に SQL アクセス機能を追加する。Matisse などでも同様のことが可能である) 。パラダイムの相違を吸収する使い方が必要となる。
実際に、オブジェクト指向におけるカプセル化の概念と、多くのデータベース技術の基本的な前提との間には、本質的に不整合な部分がある。オブジェクト指向のカプセル化の概念では、オブジェクトのデータは隠蔽されており、オブジェクトが公開しているインタフェース(メソッド)を通してのみ扱うことができる。一方データベース技術においては、データベース構築時に予めデータへのアクセスパスを想定しておくという発想よりも、構築時に想定していなかったアクセスパスによるデータアクセスも可能であるべきだとの前提がある。データベース中心の観点では、物事を宣言的な視点で認識する傾向がある。これに対し、オプジェクト指向の観点では、物事を複数のオブジェクトの動的なふるまいとして認識する傾向がある。こうした観点の違いは、オブジェクト指向とデータベースの間のインピーダンスミスマッチの一端である。
一部の人々は、オブジェクトデータベース技術は失敗であったとの見解をもっている。
しかし多くの人々は、オブジェクトデータベース技術の本質的な方向性は、現時点においても有効であると考えている。現在も、オブジェクトデータベース技術を含め、データベースの機能を密接にオブジェクト指向プログラミング言語と統合させる努力が、研究者のコミュニティと開発者のコミュニティの双方で続けられている。
[編集] 標準化の動向
DBMS (データベース管理システム) にオブジェクトを格納する移植性のあるアプリケーションソフトウェアを開発できるようにするための、複数の仕様を策定することを目的とした標準化団体として、ODMG (Object Data Management Group) があった。 ODMG に参加していた会員は、ODBMS (オブジェクトデータベース管理システム) 開発企業およびオブジェクトリレーショナルマッピング技術の開発企業、研究者のコミュニティ、その他 ODMG の目的に関心をもった団体であった。 ODMGは、いくつかの仕様を策定し公開した。 2006年現在の最新バージョンは ODMG 3.0 である。 ODMG 3.0 は次の内容から構成される。
- 概要
- オブジェクトモデル: OMG (Object Management Group) オブジェクトモデルに基づく
- オブジェクト仕様言語
- オブジェクト定義言語 (ODL; Object Definition Language)
- オブジェクト交換フォーマット (OIF; Object Interchange Format)
- オブジェクト問い合わせ言語 (OQL; Object Query Language)
- C++バインディング
- Smalltalkバインディング
- Javaバインディング
- 補遺
- OMGオブジェクトモデルとの比較
1990年代後半にオブジェクト指向プログラミング言語 Java が普及する状況があり、主な ODBMS 開発企業とオブジェクトリレーショナルマッピング技術の開発企業の多くは、ODMG Java言語バインディングの仕様を策定すべきだと主張した。 Java言語バインディングは、ODMG 仕様に追加された[4]。 2001年に、ODMG Java言語バインディングは Java Community Process (JCP) に提出され、Java Data Objects (JDO) 仕様の基礎となった。 ODMG の参加企業は、Java Data Objects 仕様の策定に専念することを決定した。 その結果、標準化団体 ODMG は2001年に活動を停止した。
一方、ORDBMS (オブジェクト関係データベース) においては、多くのオブジェクト指向の機能が、SQL:1999の標準に採用され規定された。 現時点では、実際の ORDBMS による、SQL:1999 で規定されたオブジェクト指向機能の実装水準は、さまざまである。
2005年にクック、レイ、ローゼンバーガーが、ODBMS について、ODMGとは異なる手法で取り組むことを提唱した。彼らは、ODBMS に ODMGのような標準化されたオブジェクト指向のデータ操作のインタフェースを追加するという手法を放棄し、オブジェクト指向プログラミング言語(Javaや.NETなど)自体に、オブジェクトデータベースに対するデータ操作機能をもたせることを、提唱している。その結果として、db4o などネイティブクエリを実装した ODBMS がいくつか現れている。こうした動向と同様な動きとして、マイクロソフト社が、2005年9月に言語統合クエリ(LINQ; Language Integrated Query)と DLINQ (LINQの実装) を発表した。LINQとDLINQは、マイクロソフト社のプログラミング言語である C# や Visual Basic .NET に、密接にプログラミング言語に統合されたデータベースクエリ機能をもたせる技術である。
2006年2月に、オブジェクト指向技術の標準化団体 OMG (Object Management Group) が、ODMG 標準の権利を取得し、ODMG 3.0 を基にして次世代のオブジェクトデータベース技術を開発すること、およびそのためにオブジェクトデータベース技術作業部会 (ODBT WG; Object Database Technology Working Group) を発足させたことを、発表した。 ODBT WG は、オブジェクトデータベースのさまざまな面での技術的革新の次のような標準群を作成している。
- オブジェクトデータベース技術 (レプリケーションなど)
- データ管理 (空間インデクシングなど)
- データフォーマット (XMLなど)
- オブジェクトデータベースの適用対象領域を支援する機能 (リアルタイムシステムなど)
[編集] 関連項目
- OMG (Object Management Group)
- データベース
- ナビゲーショナルデータベース
- オブジェクト関係データベース
- オブジェクトリレーショナルマッピング
- 関係モデル
- SQL
- 永続化
[編集] 脚注
- ^ Kim, Won. Introduction to Object-Oriented Databases. The MIT Press, 1990. ISBN 0-262-11124-1
- ウォン・キム、増永良文(監訳)、鈴木幸市(監訳) 『オブジェクト指向データベース入門』 共立出版、1996年 ISBN 4-320-02840-6
- ^ Bancilhon, Francois; Delobel,Claude; and Kanellakis, Paris. Building an Object-Oriented Database System: The Story of O2. Morgan Kaufmann Publishers, 1992. ISBN 1-55860-169-4.
- ^ オブジェクトデータベースがどのように動くかを示すアニメーション
- ^ Barry, Douglas and Duhl, Joshua. Object Storage Fact Books: Object DBMSs and Object-Relational Mapping. Barry & Associates, Inc., 2001. ODMGがオブジェクトデータベース製品とオブジェクトリレーショナルマッピング製品の双方に対応したことを説明する文書
[編集] 文献案内
- 石塚圭樹 『オブジェクト指向データベース』 アスキー、1996年 ISBN 4-7561-1909-3
- ウォン・キム、増永良文(監訳)、鈴木幸市(監訳) 『オブジェクト指向データベース入門』 共立出版、1996年 ISBN 4-320-02840-6
- アクマル・チャウドリ(編)、メアリ・ルーミス(編)、松本一夫(監訳)、藤原淳一(監訳) 『事例で学ぶオブジェクトデータベース活用技法』 プレンティスホール出版、1999年 ISBN 4-89471-104-4
- W・キルステン、M・キューン、M・イリンガー、B・レーリッヒ、大櫛陽一(監修)、小田嶋由美子(訳)、インターシステムズジャパン(訳) 『オブジェクトデータベースCaché入門』 シュプリンガーフェアラーク東京、2004年 ISBN 4-431-71062-0
- R. G. G. Cattell, Douglas K. Barry, Mark Berler, Jeff Eastman, David Jordan, Craig Russell, Olaf Schadow, Torsten Stanienda, and Fernando Velez, The Object Data Standard: ODMG 3.0, Morgan Kaufmann Pub, 2000 ISBN 1-55860-647-5
- リック・キャッテル、河込和宏(訳)、野口喜洋(訳)、山田広佳(訳)、田中立二(訳)、原潔(訳) 『オブジェクト・データベース標準 ODMG-93 Release1.1』 共立出版、1995年 ISBN 4-320-02745-0
[編集] 外部リンク
[編集] 技術情報
- @IT オブジェクト指向データベースの復権
- オージス総研 今日から始めるオブジェクト指向データベース - オブジェクト指向の広場
- ODBMS.ORG - Object Database Resource Portal
- Benchmark for Databases (open source)
- Konstantin Knizhnik - GOODS、Perst など
- ODMG - 標準化団体 Object Data Management Group
- OMG - OMG CORBA サービス仕様
- Multi-Paradigm Database and "Dynamic Relational" Ideas
[編集] オブジェクトデータベースの実装
[編集] 商用
いくつかの商用のオブジェクトデータベースでは、試用版をダウンロードすることができる。
- ObjectStore (ソニックソフトウェア) - Java、C++ のバインディングを提供している
- Caché (インターシステムズ) - ポストリレーショナルデータベース
- Objectivity/DB (オージス総研) - Java、C++、Smalltalk のバインディングを提供している
- GemStone - Smalltalk、Java、C++ のバインディングを提供している
- Versant - C++、Java のバインディングを提供している
- Matisse - Post-Relational Database
- JADE - オブジェクト指向プラットフォームJADE
- ObjectDB
- ObjectDRIVER
- VOSS - Virtual Object Storage System
- Jeevan
[編集] オープンソース・商用
- db4o (英語) - database for objects
[編集] オープンソース
- GOODS、Post++ for C++、PERST for Java/C#、DyBase for scripting languages
- Zope/ZODB - PythonによるアプリケーションサーバZopeとオブジェクトデータベースZODB (Zope Object Database)
- Ozone Database Project - Javaバインディングを提供している
- Orient ODBMS - Java、C++ のバインディングを提供している
- Axiom - Pythonバインディングを提供している
[編集] オブジェクトリレーショナルマッピング
- Hibernate
- ObJectRelationalBridge - Apacheソフトウェア財団のプロジェクト (ODMG3.0で規定されたインタフェースを実装している)
- CrossDB
- Speedo - JDO 仕様の実装 (Java)
- Php Object Generator - さまざまなデータベースに対応したPHPのオブジェクトのプログラムを生成する
- Patterns for Object / Relational Mapping and Access Layers
- Citations from CiteSeer