オブジェクト指向の開発、そしてRDBの限界
オブジェクトデータベースとは
オブジェクトデータベースとひと言でいっても、人によって定義はさまざまなのが実情だと思います。ここでは、私見を含めてオブジェクトデータベースとはどういうものであるかについてお話したいと思います。
Wikipediaでオブジェクトデータベースの記述を参照すると、現時点の最大公約数的なオブジェクトデータベースの定義を垣間見ることができます。冒頭に最もシンプルな説明がありますので、引用してみます。
オブジェクトデータベースは、オブジェクト指向プログラミングで使うオブジェクトの形式で表現されるデータを格納するデータベースである。
これはとても分かりやすい説明ですが、この記事を読まれる人にとっては少し粒度が高すぎると思いますので、本記事ではもう少し補足していきましょう。
永続化と直列化:オブジェクトデータベースが持つべき必須条件
まず、オブジェクトデータベースに関連深い言葉をいくつか解説していきます。
オブジェクト指向言語で定義されたクラスのプログラム実行時のオブジェクト(インスタンス)のメモリ構造を、通常はディスク装置に書き、一度プログラムを終了します。これを「永続化」といいます。
その後、必要に応じて、別のプログラム(セッション)が、以前のそのオブジェクトのメモリ構造を自プロセスのメモリ空間に再現するために、その永続化されたデータを読み込んでメモリに展開します。
通常、メモリ上の構造をそのままディスクに展開(永続化)するのは、メモリシステムとディスクシステムの構造上の違いから難しく、かつ効率がよくないので、その構造をコンパクトにまとめた、連続データに変換して格納します。この操作を「シリアライズ(直列化)」と呼びます。
インスタンスが増えたときに、多数のインスタンスから該当インスタンスの、シリアライズされた実体を素早く見つけて読むことができなければ、実用上大きな問題になります(そうでなければ、遅くて使えないということになります)。これは、オブジェクトデータベースの実装における必要要件です。
それを実現するためには、インスタンスを特定するための識別子(アイデンティティ)が必要です。その識別子を指定することによって、該当インスタンスをディスク上のインスタンスの集合から素早く特定して、取得できるメカニズムが必要なのです。
「インスタンスをメモリに展開」の意味
インスタンスという言葉についても、若干補足説明が必要でしょう。大ざっぱにいうと、クラスとはリレーショナルデータベースのテーブル定義に該当します(もちろんコレクションとか埋め込み、参照などの概念はテーブル定義にはありませんが)。インスタンスは、そのクラス定義(ひな型)を実体化したものと説明されます。そうだとすると、単純な2次元のテーブル構造を実体化するのは、そんなに難しい話じゃないと考えられるかもしれません。
ところが、オブジェクトのメモリ構造を構築するときには、個々のオブジェクトのインスタンスをメモリに展開するだけでは意味をなし得ません。これを意味のあるものにするためには、インスタンス間の関係を含めてメモリ上に展開する必要があります。
この関係を含めてメモリ上に展開されることにより、あるオブジェクトからそれにひも付いているオブジェクトにアクセスすることができます。これをナビゲーショナルアクセスやカスケード参照などと呼びます。これは、オブジェクト指向プログラミングではごくごく普通に行われるプログラミングスタイルです。逆に永続化するときには、再度読み込む際にその関係が損なわれないような形に直列化する必要があるわけです。
しかし、直列化が必ず必要かというとそうでもありません。インターシステムズのCachéでは、多次元配列という永続実体にオブジェクトの構造をマッピングすることで同等のことを実現しています。
さらに、識別子を指定することで特定のインスタンスに素早くアクセスことに加えて、実際のアプリケーションでは、何らかの条件に合致するインスタンスの集合を抽出できる能力も必要です。これにはSQLのような宣言的な問い合わせ言語が必要になります。
この領域は、オブジェクトデータベースの実装ごとに大きな差がある部分です。問い合わせ言語には、オブジェクト指向を徹底的に追求した「OQL」という規格もありますが、残念ながら広く普及していません。現実にはSQLのサブセット、あるいは一部オブジェクト拡張したものの実装が多いのではないかと思います。
以上が、オブジェクトデータベースが満たすべき必須条件です。
1/3 |
Index | |
オブジェクト指向の開発、そしてRDBの限界 | |
Page 1 オブジェクトデータベースとは 永続化と直列化:オブジェクトデータベースが持つべき必須条件 インスタンスをメモリに展開」の意味 |
|
Page 2 オブジェクトデータベースのもう1つの要件 リレーショナルデータベースとオブジェクトデータベースの差異 開発生産性とインピーダンスマッチの解消 |
|
Page 3 オブジェクトデータベースの課題 |
いま知るべきオブジェクトデータベースの世界 |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|