オブジェクト指向の開発、そしてRDBの限界
オブジェクトデータベースとは
オブジェクトデータベースとひと言でいっても、人によって定義はさまざまなのが実情だと思います。ここでは、私見を含めてオブジェクトデータベースとはどういうものであるかについてお話したいと思います。
Wikipediaでオブジェクトデータベースの記述を参照すると、現時点の最大公約数的なオブジェクトデータベースの定義を垣間見ることができます。冒頭に最もシンプルな説明がありますので、引用してみます。
オブジェクトデータベースは、オブジェクト指向プログラミングで使うオブジェクトの形式で表現されるデータを格納するデータベースである。
これはとても分かりやすい説明ですが、この記事を読まれる人にとっては少し粒度が高すぎると思いますので、本記事ではもう少し補足していきましょう。
永続化と直列化:オブジェクトデータベースが持つべき必須条件
まず、オブジェクトデータベースに関連深い言葉をいくつか解説していきます。
オブジェクト指向言語で定義されたクラスのプログラム実行時のオブジェクト(インスタンス)のメモリ構造を、通常はディスク装置に書き、一度プログラムを終了します。これを「永続化」といいます。
その後、必要に応じて、別のプログラム(セッション)が、以前のそのオブジェクトのメモリ構造を自プロセスのメモリ空間に再現するために、その永続化されたデータを読み込んでメモリに展開します。
通常、メモリ上の構造をそのままディスクに展開(永続化)するのは、メモリシステムとディスクシステムの構造上の違いから難しく、かつ効率がよくないので、その構造をコンパクトにまとめた、連続データに変換して格納します。この操作を「シリアライズ(直列化)」と呼びます。
インスタンスが増えたときに、多数のインスタンスから該当インスタンスの、シリアライズされた実体を素早く見つけて読むことができなければ、実用上大きな問題になります(そうでなければ、遅くて使えないということになります)。これは、オブジェクトデータベースの実装における必要要件です。
それを実現するためには、インスタンスを特定するための識別子(アイデンティティ)が必要です。その識別子を指定することによって、該当インスタンスをディスク上のインスタンスの集合から素早く特定して、取得できるメカニズムが必要なのです。
「インスタンスをメモリに展開」の意味
インスタンスという言葉についても、若干補足説明が必要でしょう。大ざっぱにいうと、クラスとはリレーショナルデータベースのテーブル定義に該当します(もちろんコレクションとか埋め込み、参照などの概念はテーブル定義にはありませんが)。インスタンスは、そのクラス定義(ひな型)を実体化したものと説明されます。そうだとすると、単純な2次元のテーブル構造を実体化するのは、そんなに難しい話じゃないと考えられるかもしれません。
ところが、オブジェクトのメモリ構造を構築するときには、個々のオブジェクトのインスタンスをメモリに展開するだけでは意味をなし得ません。これを意味のあるものにするためには、インスタンス間の関係を含めてメモリ上に展開する必要があります。
この関係を含めてメモリ上に展開されることにより、あるオブジェクトからそれにひも付いているオブジェクトにアクセスすることができます。これをナビゲーショナルアクセスやカスケード参照などと呼びます。これは、オブジェクト指向プログラミングではごくごく普通に行われるプログラミングスタイルです。逆に永続化するときには、再度読み込む際にその関係が損なわれないような形に直列化する必要があるわけです。
しかし、直列化が必ず必要かというとそうでもありません。インターシステムズのCachéでは、多次元配列という永続実体にオブジェクトの構造をマッピングすることで同等のことを実現しています。
さらに、識別子を指定することで特定のインスタンスに素早くアクセスことに加えて、実際のアプリケーションでは、何らかの条件に合致するインスタンスの集合を抽出できる能力も必要です。これにはSQLのような宣言的な問い合わせ言語が必要になります。
この領域は、オブジェクトデータベースの実装ごとに大きな差がある部分です。問い合わせ言語には、オブジェクト指向を徹底的に追求した「OQL」という規格もありますが、残念ながら広く普及していません。現実にはSQLのサブセット、あるいは一部オブジェクト拡張したものの実装が多いのではないかと思います。
以上が、オブジェクトデータベースが満たすべき必須条件です。
| 1/3 |
| Index | |
| オブジェクト指向の開発、そしてRDBの限界 | |
| Page 1 オブジェクトデータベースとは 永続化と直列化:オブジェクトデータベースが持つべき必須条件 インスタンスをメモリに展開」の意味 |
|
| Page 2 オブジェクトデータベースのもう1つの要件 リレーショナルデータベースとオブジェクトデータベースの差異 開発生産性とインピーダンスマッチの解消 |
|
| Page 3 オブジェクトデータベースの課題 |
|
| いま知るべきオブジェクトデータベースの世界 |
TechTargetジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
