オブジェクト
データベースは、
オブジェクト指向プログラミングで用いられるオブジェクトの形式でデータを格納する
データベースです。
オブジェクト指向データベースとも呼ばれます。
オブジェクト指向プログラミングにおけるオブジェクトの永続化や、オブジェクト間の複雑な関連性を管理するのに適しており、
オブジェクト指向プログラミング言語との親和性が高い点が特徴です。
オブジェクト
データベースを管理するシステムは、オブジェクト
データベース管理システム (ODBMS) または
オブジェクト指向データベース管理システム (OODBMS) と呼ばれます。この項目では、オブジェクト
データベースそのものと、ODBMSの両方について詳しく解説します。
ODBMSの概要
ODBMSは、
データベースに格納されたオブジェクトを、
オブジェクト指向プログラミング言語のオブジェクトとしてシームレスに利用できる機能を提供します。具体的には、以下の機能によって
オブジェクト指向プログラミングを拡張します。
透過的なデータ永続化: プログラマが永続化処理を意識することなく、オブジェクトをデータベースに保存・復元できます。
並行性制御: 複数のユーザーが同時にオブジェクトを操作する際の競合を制御します。
データ復旧: システム障害が発生した場合に、データを復旧します。
結合問い合わせ: オブジェクト間の関連性を利用した複雑な検索を可能にします。
多くのODBMSは、Smalltalk、
C++、
Java、C#などの
オブジェクト指向プログラミング言語と連携して動作するように設計されています。一方で、独自の
プログラミング言語を持つODBMSも存在します。
オブジェクト
データベースは、複雑なデータ構造を高速に処理する必要がある場合に推奨されます。
データベース技術に
オブジェクト指向の概念を導入する方法は、大きく分けて次の2つがあります。
オブジェクトデータベース: オブジェクト指向の概念を直接的に採用し、データをオブジェクトとして格納します。
オブジェクト関係データベース: 既存の関係
データベースに
オブジェクト指向の機能を追加します。
ODBMSの
実装には、ObjectStore、Caché、Objectivity/DB、GemStone/S、db4oなどが挙げられます。
ODBMSの
研究開発は、1970年代半ばに始まりました。当時のDBMSでは、グラフ構造を持つオブジェクト群を扱う機能が十分に整備されていませんでした。1985年頃には、「
オブジェクト指向データベースシステム」という用語が登場し、さまざまな研究プロジェクトが立ち上げられました。
主要な研究プロジェクト
Encore-Ob/Server(ブラウン大学)
EXODUS(
ウィスコンシン大学)
IRIS(ヒューレット・パッカード)
ODE(
ベル研究所)
ORION (MCC)
Vodak (GMD-IPSI)
Zeitgeist(テキサス・インスツルメンツ)
特にORIONプロジェクトは多くの論文が発表され、このプロジェクトの成果をまとめた書籍も出版されました。
初期の商用実装
初期の商用ODBMSとしては、以下のような製品がありました。
GemStone(Servio Logic、後のGemStone Systems)
Gbase (Graphael)
Vbase (Ontologic)
1990年代前半には、さらに多くの製品がODBMS市場に参入しました。ITASCA、Jasmine、Matisse、Objectivity/DB、ObjectStore、ONTOS、O2、POET、Versant Object Databaseなどがその例です。これらの製品の中には、現在も開発・販売が継続されているものがあります。
初期のODBMSは、様々な
プログラミング言語に永続化機能を追加する形で
実装されていました。たとえば、GemStone/SはSmalltalk、GbaseはLisp、VbaseはCOP(C Object Processor)をベースとしていました。1990年代は
C++が主流でしたが、その後
JavaやC#への対応も進みました。
ODBMSの必要性
ODBMSが求められる背景には、以下の2つの要因があります。
1.
複雑なデータ構造の扱いづらさ: 従来の関係
データベースでは、複雑な構造を持つデータを扱うのが煩雑でした。
2.
オブジェクト指向プログラミングの普及: オブジェクト指向プログラミング言語 (Smalltalk、
C++、
Java、C#など) を使ったアプリケーション開発が一般的になり、オブジェクトと関係
データベースのデータ構造との間で変換処理が必要となるインピーダンスミスマッチが問題視されるようになりました。
インピーダンスミスマッチ
オブジェクト指向プログラミングで表現されたデータと関係
データベースのテーブル構造との間の不整合は、
プログラマにとって大きな負担となります。オブジェクトとテーブルの相互変換は退屈な作業であり、開発効率の低下や実行速度の遅延を招く可能性があります。この問題を解決するために、オブジェクト
データベースやオブジェクトリレーショナルマッピングといった技術が利用されます。
ODBMSの採用動向
1990年代初頭、
オブジェクト指向の概念を
データベースに取り入れる試みが活発になりました。この課題に取り組むために、2つのアプローチが生まれました。
1.
オブジェクトデータベース: プログラミング言語に永続化機能を追加する。
2.
オブジェクト関係データベース: 関係
データベースに
オブジェクト指向の機能を追加する。
オブジェクト
データベースは、工学、空間、
電気通信、
高エネルギー物理学、
分子生物学などの分野で利用されてきました。近年では、
金融業界での採用事例も現れています。
オブジェクト
データベースは、現在、世界最大規模の
データベースを支えています。スタンフォード線形加速器センターでは、1000
テラバイトを超えるオブジェクト
データベースが運用されており、1日あたり1
テラバイト以上という高速なデータ増加に対応しています。
ODBMSの多様な利用形態
ODBMSは、機器、パッケージソフトウェア、
リアルタイムシステムなど、様々な用途に組み込まれています。
オブジェクト関係
データベース (ORDBMS) は広く利用されていますが、その多くは従来のRDBMSとして利用され、
オブジェクト指向の機能を十分に活用する事例は多くありません。ORDBMSは、データ操作言語として
SQLを引き継いでおり、
マイケル・ストーンブレーカーによって命名されました。ORDBMSはハイブリッド
データベースとも呼ばれます。
主要なRDBMSベンダーは、ORDBMSの採用や開発企業の買収を通じて、自社の関係
データベースに
オブジェクト指向の拡張を施してきました。ORDBMSの
実装には、
PostgreSQL、Illustra、Informix Dynamic Server、
IBM Db2、Oracle Databaseなどがあります。
オープンソースODBMSの登場
2004年以降、オープンソースのODBMSが注目され、ODBMSは第二の成長期を迎えています。オープンソースであるため導入コストが低く、
Java、
C++、
Python、C#などの
オブジェクト指向プログラミング言語で
実装されています。代表的なオープンソースODBMSには、db4o、Perst、Magmaなどがあります。
技術面の特徴
ODBMSでは、
オブジェクト指向の考え方を純粋に採用しており、データはオブジェクトとして
データベースに格納されます。オブジェクトは
カプセル化されており、クラスで定義されたメソッドを通してのみ操作できます。オブジェクトは型を持ち、型の間には継承関係があります。
オブジェクトの参照
アプリケーションは、ナビゲーショナルな方法でオブジェクト
データベース内のオブジェクトへの参照を取得できます。オブジェクトは他のオブジェクトへの参照を持つことができ、参照関係を辿って目的のオブジェクトにアクセスします。また、多くのODBMSでは、宣言的なデータ操作言語による方法も利用できます。
OQL
オブジェクト問い合わせ言語 (OQL) は、オブジェクト
データベースの標準的な問い合わせ言語として策定されていますが、実際にはODBMSごとに
実装に差異があります。また、ナビゲーショナルな方法と宣言的な方法の統合方法もODBMSによって異なります。
検索速度
ODBMSの検索速度は、RDBMSと比較して高速になる可能性があります。これは、ODBMSでは結合処理が少なく、オブジェクトの参照を直接辿ることで目的のオブジェクトにアクセスできるからです。
オブジェクト
データベースのスキーマと
オブジェクト指向プログラミング言語は、通常、同じ型定義を使用しますが、ODBMSごとに微妙な違いがあります。
オブジェクト
データベースは、
マルチメディアデータの取り扱いに適しています。音や映像などのコンテンツをオブジェクトとして扱い、
エンコードやデコードなどの処理をオブジェクトのメソッドに任せることができます。
バージョニング
多くのODBMSはバージョニングをサポートしており、オブジェクトの状態の変更履歴を追跡できます。オブジェクトの各バージョンもまたオブジェクトとして扱うことができます。
トリガーと制約
一部のODBMSは、トリガーや制約などのアクティブ
データベースの基本的な機能も提供しています。
特長と課題
ベンチマークテストでは、特定の処理において、ODBMSがRDBMSよりも優れた性能を示すことが確認されています。これは、ODBMSがナビゲーショナルなアクセスを多用しているためです。オブジェクトの参照を辿るという直接的なアクセス方法は、効率的なデータ取得を可能にします。
一方、ナビゲーショナル
データベースは、特定の探索経路に最適化されているため、汎用的なデータ操作言語によるアクセスが遅くなるという批判もあります。
データベース構築時に想定していなかったアクセスパスによるデータアクセスは効率が悪くなる可能性があります。
ODBMSは、RDBMSに比べてツールや機能の
相互運用性が低いという問題もあります。RDBMSでは、JDBCやODBCといった標準化された接続インターフェースや、帳票作成ツール、
バックアップツールなどが豊富に存在します。また、ODBMSには、RDBMSのような形式化された
数学的な基盤がないことも、データ操作言語のサポートにおいて不利に働くと指摘されています。
現在の状況
ただし、現在では、
SQLによるアクセスを提供しているODBMSもあり、これらの批判は必ずしも妥当ではありません。
オブジェクト指向における
カプセル化の概念と、多くの
データベース技術の前提との間には、本質的に不整合な部分があります。
カプセル化されたオブジェクトは、インターフェースを通してしか操作できませんが、
データベース技術は、様々なアクセスパスをサポートする必要があります。この観点の違いが、
オブジェクト指向と
データベースの間のインピーダンスミスマッチの一因となっています。
一部の人々は、オブジェクト
データベース技術は失敗であったと見なしていますが、多くの人々は、この技術の本質的な方向性は有効であると考えています。現在も、研究者と開発者のコミュニティの両方で、
データベースと
オブジェクト指向プログラミング言語を密接に統合するための努力が続けられています。
標準化とネイティブクエリ
オブジェクトを
データベースに格納するための
移植性のあるアプリケーションを開発するために、ODMG (Object Data Management Group) という標準化団体が存在しました。ODMGは、ODBMSベンダー、オブジェクトリレーショナルマッピング技術開発企業、研究者コミュニティなどが参加していました。ODMGは、オブジェクトモデル、オブジェクト仕様言語、オブジェクト定義言語、オブジェクト交換フォーマット、オブジェクト問い合わせ言語、各種言語バインディングなどの仕様を策定しました。
ODMG 3.0
ODMGの最新バージョンはODMG 3.0で、以下の要素から構成されています。
概要
オブジェクトモデル: OMG (Object Management Group) オブジェクトモデルに基づく
オブジェクト仕様言語
オブジェクト定義言語 (ODL)
オブジェクト交換フォーマット (OIF)
オブジェクト問い合わせ言語 (OQL)
C++バインディング
Smalltalkバインディング
Javaバインディング
補遺
* OMGオブジェクトモデルとの比較
ODMGの終焉とJava Data Objects
1990年代後半に
Javaが普及したことを受け、主要なODBMS開発企業はODMG
Java言語バインディングの仕様を策定することを主張しました。その後、ODMG
Java言語バインディングは
Java Community Process (JCP) に提出され、
Java Data Objects (JDO) 仕様の基礎となりました。ODMGの参加企業はJDO仕様の策定に専念することになり、2001年にODMGは活動を停止しました。
ORDBMSにおける標準化
一方、ORDBMSでは、多くの
オブジェクト指向の機能が
SQL:1999に採用されましたが、
実装レベルは製品によって異なります。
ネイティブクエリの登場
2005年、クック、レイ、ローゼンバーガーは、ODBMSにODMGのような標準化されたインターフェースを追加するのではなく、
オブジェクト指向プログラミング言語自体に
データベース操作機能を持たせることを提唱しました。この結果、db4oのようなネイティブクエリを
実装したODBMSが登場しました。
マイクロソフトも、2005年に統合言語クエリ (LINQ) を発表し、C#やVisual Basic .NETに密接に統合された
データベースクエリ機能を提供しました。
OMGによる再始動
2006年、
オブジェクト指向技術の標準化団体OMGは、ODMG標準の権利を取得し、次世代のオブジェクト
データベース技術を開発するための作業部会 (ODBT WG) を発足させました。ODBT WGは、オブジェクト
データベース技術、データ管理、データフォーマット、適用対象領域支援などの技術革新に取り組んでいます。
まとめ
オブジェクト
データベースは、
オブジェクト指向プログラミングの概念を直接的に適用した
データベースです。複雑なデータ構造を効率的に扱い、
オブジェクト指向プログラミング言語との親和性が高いという特長があります。過去にはRDBMSとの比較や標準化の課題がありましたが、現在はオープンソースのODBMSの登場や、
プログラミング言語との統合が進んでいます。今後の
データベース技術の発展において重要な役割を果たすことが期待されます。