• 検索結果がありません。

2 âIâuâWâFâNâgÄwîⁿâfü[â^âxü[âX

N/A
N/A
Protected

Academic year: 2018

シェア "2 âIâuâWâFâNâgÄwîⁿâfü[â^âxü[âX"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

データベース

第 13 回 (2) オブジェクト指向データベー

鈴木幸市

(2)

今日の内容

 オブジェクト指向言語とデータベース

 インピーダンスミスマッチ

 プログラム言語のオブジェクトをデータベースに格納

1980 年代後半~ 1990 年代前半に

 C++, Smalltalk など

何らかのクエリは必要

Query ベースの考え方

 オブジェクト拡張 SQL

 オブジェクトベースの考え方

トランザクション

 Optimistic/Pesimistic

実装例

(3)

オブジェクト指向データベースへのアプ

 ローチ オブジェクト指向データベース (OODB)

Object-Oriented Database の略

 歴史的に複数の観点からのアプローチがあった

プログラム言語からのアプローチ

 オブジェクト指向言語で使うオブジェクトをデータベース上で 永続的に扱いたい

データモデルからのアプローチ

 リレーショナルモデルを拡張して自由度の高いデータ構造を扱 いたい

API からのアプローチ

 リレーショナルデータベースの操作をオブジェクト指向言語の 考え方で行いたい

 現在でも上記のアプローチをそれぞれオブジェクト指向データ

ベースと呼ぶことがあるので注意!!

そもそもどのアプローチなのかを理解することが重要

オブジェクト指向といっても内容はさまざま

(4)

プログラム言語からのアプローチ (1)

 インピーダンスミスマッチ問題

C++ 、 Java などのオブジェクト指向言語がデータベースと

相性が悪い

 プログラムでは一度に一つのオブジェクトを処理する

 データベースは一度に複数の行を処理する

SQL はあまり使わず、プログラム言語で使うオブジェクトを

永続的にデータベースに格納するアプローチ

 メモリ上のオブジェクトとディスク上のオブジェクトをプログ ラム言語上で区別しない

 オブジェクトのチェインをたどるには、リレーショナルモデ

ルでは性能が出にくい

 実装例: 1980 年代後半から 1990 年前半にかけて多く行わ

れた

ObjectStore (ONTOS): C++ の永続オブジェクト

 現在は XML 用のデータベースエンジンとして存続

GemStone : Smalltalk の永続オブジェクト

(5)

プログラム言語からのアプローチ (2)

RDBと OODB この間をサポートす

るのが OR マッピン

(6)

OODB の利用に際しての注意

 トランザクションモデルが違うことがある

 楽観的制御 (Optimistic Control) を採っていることがある

(7)

楽観的制御と悲観的制御

 同時実行制御のやり方が異なる

悲観的制御 (ほとんどのリレーショナル DB)

 ロックは SQL 実行前に取得する

 ロックが取れなければ SQL がエラーリターン (あるいは待たさ れる )

 トランザクションのコミットはシステムエラーがない限り成功 する

エラー処理は単純

 高負荷時でのコミット失敗は起こりにくい

楽観的制御

 ロックはトランザクションの最後にチェックする

他のトランザクションと衝突しても読み書きができる

 他のトランザクションとの衝突が起こるとコミットは失敗する

 エラー原因によってエラー処理をきちんと行う必要がある

最初から処理をやり直すなど

 高負荷時にコミット失敗する可能性がどんどん大きくなる

(8)

データモデルからのアプローチ (1)

SQL を拡張する

 データ型、メソッドをユーザ定義できるようにする

SGML/XML 、ストリームデータなど

 外部ファイルもデータベースに取り込む

 データの間のリンク (ポインタ )を導入する

 すべての行を一意に識別できる ID をつける (オブジェクト ID 、 OID 、 Object ID)

OID がわかるとそのオブジェクトのクラスや構造がわかるようにする

OID をカラムに格納すると、これがポインタとして使える

 テーブルに「継承」の概念を持ち込む

テーブル→クラス

行→オブジェクト

親テーブルへの SQL で子テーブルも読み書きする

 オブジェクトリレーショナルデータベース (ORDB) と呼ばれるこ とがある

実装例:

PostgreSQL 、 Oracle をはじめ、多くの RDBMS はオブジェクト 拡張を実装している

(9)

データモデルからのアプローチ (2)

複雑な構造を持ったデータを SQL で 読み書きする

パス式 (path expression) が提案

、実装されている

この図で、学籍番号が与えられたら、その学生 の主任教授と指導教官の名前を探す

SELECT 学部 .主任教授 .氏名 FROM 学籍簿

WHERE 学籍番号 ='xxxx';

SELECT 指導教官 .氏名 FROM 学籍簿

WHERE 学籍番号 ='xxxx';

テーブル名が一つしか出てこない

結合が現れない

リンクをたどるのに結合を使わない→高速化が可

(10)

リレーショナル DB との比較

 同じことをリレーショナルモデルでやってみる

この図で、学籍番号が与えられたら、その学生 の主任教授と指導教官の名前を探す

SELECT 教官 .氏名

FROM 学籍簿 , 学部 , 教官 WHERE 学籍番号 ='xxxx' AND 学部 = 学部 ID AND 主人教授 = 教官 ID;

SELECT 教官 .氏名

FROM 学籍簿 , 教官

WHERE 学籍番号 ='xxxx' AND 指導教官 = 教官 ID;

関連するすべてのテーブルを列挙しなければな らない

SELECT 句から、ほしい情報が何かを判断しに くい

(11)

API からのアプローチ

 データベースへのリクエストをオブジェク

ト指向風に行う

SQL は単なる文字列として扱う

(12)

JDBC

Java 言語におけるデータベースアクセス方法

DBMS 独立なクラスとそのメソッドインタフェー

スを規定している

SELECT のように複数の行が帰るメソッドのやり

 データベースオブジェクトに SQL を渡す

 results = db1.executeQuery("SELECT 氏名 FROM

学籍簿 ");

 その返り値に、結果の複数の行が入っている (ように見

える ) → 上の場合は "results" に複数の行が入っている

 返り値のオブジェクトから 1 行ずつデータを読む

while (results.next()) {

String item=results.getString(" 氏名 ");

System.out.println(item);

}

(13)

JDBC の特徴とその実装例

特徴

Java 言語からデータベースにアクセスする際

に使うクラスとそのメソッドを規定している

 実際の DBMS にあわせた実装はそれぞれの

DBMS の仕事

 データベースへの依存性の低いアプリケー

ション開発が可能になっている

実装例

 ほとんどの DBMS で実装されている

参照

関連したドキュメント

(The Elliott-Halberstam conjecture does allow one to take B = 2 in (1.39), and therefore leads to small improve- ments in Huxley’s results, which for r ≥ 2 are weaker than the result

[r]

“Breuil-M´ezard conjecture and modularity lifting for potentially semistable deformations after

S., Oxford Advanced Learner's Dictionary of Current English, Oxford University Press, Oxford

Keywords Catalyst, reactant, measure-valued branching, interactive branching, state-dependent branch- ing, two-dimensional process, absolute continuity, self-similarity,

At the end of the section, we will be in the position to present the main result of this work: a representation of the inverse of T under certain conditions on the H¨older

[r]

[r]