いま知るべきオブジェクトデータベースの世界(1)

オブジェクト指向の開発、そしてRDBの限界

インターシステムズジャパン株式会社
テクニカルコンサルティング部 教育サービス部部長
佐藤 比呂志
2009/7/29

知っているようで知らないオブジェクトデータベース。その定義と必要条件から、RDBとの違いを解説します(編集部)

オブジェクトデータベースとは

 オブジェクトデータベースとひと言でいっても、人によって定義はさまざまなのが実情だと思います。ここでは、私見を含めてオブジェクトデータベースとはどういうものであるかについてお話したいと思います。

 Wikipediaでオブジェクトデータベースの記述を参照すると、現時点の最大公約数的なオブジェクトデータベースの定義を垣間見ることができます。冒頭に最もシンプルな説明がありますので、引用してみます。

Wikipedia[オブジェクトデータベース]より引用

 オブジェクトデータベースは、オブジェクト指向プログラミングで使うオブジェクトの形式で表現されるデータを格納するデータベースである。

 これはとても分かりやすい説明ですが、この記事を読まれる人にとっては少し粒度が高すぎると思いますので、本記事ではもう少し補足していきましょう。

永続化と直列化:オブジェクトデータベースが持つべき必須条件

 まず、オブジェクトデータベースに関連深い言葉をいくつか解説していきます。

 オブジェクト指向言語で定義されたクラスのプログラム実行時のオブジェクト(インスタンス)のメモリ構造を、通常はディスク装置に書き、一度プログラムを終了します。これを「永続化」といいます。

 その後、必要に応じて、別のプログラム(セッション)が、以前のそのオブジェクトのメモリ構造を自プロセスのメモリ空間に再現するために、その永続化されたデータを読み込んでメモリに展開します。

 通常、メモリ上の構造をそのままディスクに展開(永続化)するのは、メモリシステムとディスクシステムの構造上の違いから難しく、かつ効率がよくないので、その構造をコンパクトにまとめた、連続データに変換して格納します。この操作を「シリアライズ(直列化)」と呼びます。

 インスタンスが増えたときに、多数のインスタンスから該当インスタンスの、シリアライズされた実体を素早く見つけて読むことができなければ、実用上大きな問題になります(そうでなければ、遅くて使えないということになります)。これは、オブジェクトデータベースの実装における必要要件です。

 それを実現するためには、インスタンスを特定するための識別子(アイデンティティ)が必要です。その識別子を指定することによって、該当インスタンスをディスク上のインスタンスの集合から素早く特定して、取得できるメカニズムが必要なのです。

「インスタンスをメモリに展開」の意味

 インスタンスという言葉についても、若干補足説明が必要でしょう。大ざっぱにいうと、クラスとはリレーショナルデータベースのテーブル定義に該当します(もちろんコレクションとか埋め込み、参照などの概念はテーブル定義にはありませんが)。インスタンスは、そのクラス定義(ひな型)を実体化したものと説明されます。そうだとすると、単純な2次元のテーブル構造を実体化するのは、そんなに難しい話じゃないと考えられるかもしれません。

 ところが、オブジェクトのメモリ構造を構築するときには、個々のオブジェクトのインスタンスをメモリに展開するだけでは意味をなし得ません。これを意味のあるものにするためには、インスタンス間の関係を含めてメモリ上に展開する必要があります。

 この関係を含めてメモリ上に展開されることにより、あるオブジェクトからそれにひも付いているオブジェクトにアクセスすることができます。これをナビゲーショナルアクセスやカスケード参照などと呼びます。これは、オブジェクト指向プログラミングではごくごく普通に行われるプログラミングスタイルです。逆に永続化するときには、再度読み込む際にその関係が損なわれないような形に直列化する必要があるわけです。

 しかし、直列化が必ず必要かというとそうでもありません。インターシステムズのCachéでは、多次元配列という永続実体にオブジェクトの構造をマッピングすることで同等のことを実現しています。

 さらに、識別子を指定することで特定のインスタンスに素早くアクセスことに加えて、実際のアプリケーションでは、何らかの条件に合致するインスタンスの集合を抽出できる能力も必要です。これにはSQLのような宣言的な問い合わせ言語が必要になります。

 この領域は、オブジェクトデータベースの実装ごとに大きな差がある部分です。問い合わせ言語には、オブジェクト指向を徹底的に追求した「OQL」という規格もありますが、残念ながら広く普及していません。現実にはSQLのサブセット、あるいは一部オブジェクト拡張したものの実装が多いのではないかと思います。

 以上が、オブジェクトデータベースが満たすべき必須条件です。


1/3 次のページへ

Index
オブジェクト指向の開発、そしてRDBの限界
→ Page 1
オブジェクトデータベースとは
永続化と直列化:オブジェクトデータベースが持つべき必須条件
インスタンスをメモリに展開」の意味

Page 2
オブジェクトデータベースのもう1つの要件
リレーショナルデータベースとオブジェクトデータベースの差異
開発生産性とインピーダンスマッチの解消

Page 3
オブジェクトデータベースの課題

いま知るべきオブジェクトデータベースの世界


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間