三層スキーマ構造 DBMS データベース論(第 北村...
Transcript of 三層スキーマ構造 DBMS データベース論(第 北村...
データベース論
(第
6回
):
データベースアーキテクチャ
ファイル
のアクセス法
と編
成法
北村泰彦
関西学院大学理工学部情報科学科
データベース論
北村
泰彦@
関西学院
大学
DBM
S三
層スキーマ構
造
ANSI/X3/SPAR
Cによる
DBM
Sアーキテクチャ
の標
準
標準
とは
機能
(facility)の間
のインタフェース
(interface)を定
義すること.
概念スキーマ
(conceptual schema)
実世
界を構
文的
,意
味的
に記
述したもの
.リ
レーショナル
データモデル
は概
念スキーマを
記述
するための
記号
系(sym
bol system)で
ある.
内部スキーマ
(internal schema)
データベース実
装レベル
(ファイル
)での
構文
的,意
味的記
述.
ISAMファイル
やB-木
ファイ
ル.
外部スキーマ
(external schema)
個別
の利
用者
の要
求を反
映させ
るための
記述
.ビュー
(view).
データベース論
北村
泰彦@
関西学院
大学
三層スキーマの意義:
データ独立性
物理
的デ
ータ
独立
性(physical data
indep
end
enc
e):
概念
スキ
ーマ
/内
部ス
キー
マ変
換(co
nce
ptual/
int
ern
al
trans
for
m)を
Tから
T’に変
更す
るこ
とで
,内
部ス
キー
マの
変化
に対
して
,概
念ス
キー
マCを
不変
に保
つ.
論理
的デ
ータ
独立
性(logical data
indep
end
enc
e):
外部
スキーマ/
概念
スキーマ変
換(external/conceptual
transform)を
tから
t’に変
更することで,
ユー
ザの
応用
プロ
グラ
ム群
(外
部ス
キー
マ)
を実
世界
の変
化に
よる
概念
スキ
ーマ
の変
化か
ら不
変に
保つ
.
データベース論
北村
泰彦@
関西学院
大学
ビュー
ビューの
定義
CREATE VIEW
ビュー名
AS SELECT 列名
FRO
M 表
名
CREATE VIEW
顧客名表
AS SELECT 顧客番号
,顧客名
FRO
M 顧
客表
データベース論
北村
泰彦@
関西学院
大学
ビューの活用
CREATE VIEW
顧客
伝票
表AS SELECT 顧
客名
,伝票
番号
FRO
M 顧
客表
X, 受注
表Y
WH
ERE X.顧
客番
号=
Y.顧客
番号
を定義しておくと,
SELECT 顧客
名FR
OM
顧客
表, 受
注表
WH
ERE 顧
客表
.顧客
番号
=受
注表
.顧客
番号
AND
伝票
番号
=2101
がSELECT 顧客
名FR
OM
顧客
伝票
表W
HER
E 伝票番
号=
2101
のように簡
単に書
ける.また,概
念スキーマの
変化
に対
応できる.
データベース論
北村
泰彦@
関西学院
大学
DBM
Sの三大機能
メタデータ管理
(meta data m
anagement)
DBM
Sが管理しているデータベースに関するメタデータ(リ
レーシ
ョンの存在や属性,インデックス,アクセス権限
)の管理.一般に
はメタデータのためのリレーション群(システムカタログ
(system
catalogue))を定
義して管
理する.システムカタログを構
成するリ
レーションをカタログリレーション
(catalogue relation)と呼ぶ
.
質問処理
(query processing)データベースに利用者が発した質問を構文的,意味的に解析し
て,所望のデータを検索できる内部スキーマレベルのアクセスコ
ードを生成する処理.処理コスト最小のアクセスコードを生成す
ることを質問処理の最適化
(query optimization)と
いう.
トランザ
クション管
理(transaction m
anagement)
データベースに誤りを生じさせないためのデータベースの読み書
きの
管理.障害時回復
(recovery)や同時実行制御
(concurrency control).
データベース論
北村
泰彦@
関西学院
大学
記憶媒体
コンピュータシステムの記憶媒体
主記憶
(primary storage):
半導
体メモリにより
構成
.高
速アクセス可
能.
CPU
から直
接操
作可
能.高
価.記
憶容
量の
制約
大.揮
発性
(volatile).二次記憶
(secondary storage):磁
気ディスク,
磁気
テープ,光
ディスクなど.
CPUか
らの
直接
操作
不可
.低
速.低
価格
.記
憶容
量大
.不
揮発性
(nonvolatile).
データベース論
北村
泰彦@
関西学院
大学
記憶媒体
データベースの格納には一般に二次記憶
装置(特に,磁気ディスク)が用いられる.
データベースの
データ量
が多
く,その
全てを常
に主記
憶上
に保
持することは
コスト的
に見合
わない場
合が
多い.
停電
やシステムダウンなどの
障害
に対
して安
定的
にデータを保
持するためには
,不
揮発
性記
憶媒
体にデータを記
憶する必
要が
ある.
データベース論
北村
泰彦@
関西学院
大学
磁気ディスク装置
磁気
ディスク装
置磁
気記
憶媒
体を塗
布され
た円
盤(disk)が
1本
の軸
(spindle)の周
りを等
速度
で回
転している.
ヘッドによりデータの
読み
取り
/書
き込
みが
行わ
れるディスク
表面
の円
をトラック
(track)という
トラックは
複数
のセクタ
(sector),ブロック
(block),または
ページ
(page)と呼
ばれ
る単
位に分
割さ
れる.
ブロックの
アドレスは
ディスク面
の認
識番
号,トラック番
号,ブロ
ック番
号の
3組
みで与
えられ
る.
データベース論
北村
泰彦@
関西学院
大学
磁気ディスク装置
ディスクアクセスの
手順
1.アームを移
動してヘッドを該
当するトラックに位
置付
ける.(シ
ーク時
間)
2.先
頭セクタが
ヘッドの
下に来
るの
を待
つ.
(回転
待ち時
間)
3.先
頭セクタか
ら始
まる指
定され
た数
のセクタを読
み,その
内容
を主
記憶
へ転
送する.
(転送
時間
)
ディスクのアクセス速度は低速
である.
ディスクの
読み
書きは
ページ
(ブロック)単
位(複
数の
連続
するセクタ)で行
う.
主記
憶中
に最
近アクセスされ
たページを一
定数
保持
しておく.
(バッファリング
)
データベース論
北村
泰彦@
関西学院
大学
ファイル
の論
理的
表現
と物
理的
表現
データベース論
北村
泰彦@
関西学院
大学
リレーションの実装
一般に一つのリレーションは一つのファイルとして実装される.
リレーション⇔ファイル
タプル
⇔レコード
属性
⇔フィールド
データベース論
北村
泰彦@
関西学院
大学
リレーションの実装
タプルの同定
ファイルの
アクセス法
(access method)
スキャン
(scan)(順
次検
索)
探索
(search)(ブロックサ
ーチ,バ
イナリサ
ーチ)
インデックス法
(indexing)(ISAM, VSAM
, B-木)
ハッシュ法
(hashing)
データベース論
北村
泰彦@
関西学院
大学
スキャン
ファイル
中の
レコードを同
定する最
も単
純な方
法.
逐次探索
(sequential search)あるいは
線形探索
(linear search)といわ
れる.
ファイル
のレコード群
は順
序付
けられ
ており,そ
の順
番で逐
次アクセス可
能である.
レコードを探
索する際
に用
いるフィール
ドを探索
フィールド
(search field)あるいは
探索
キー
(search key)という.
レコード数
をnとしたとき,平
均n/2
のレコードをス
キャンすれ
ば求
めるレコードが
見つか
る.時
間計
算量は
O(n)で
ある.
データベース論
北村
泰彦@
関西学院
大学
2分探索
c=1;
d=n+
1;Loop:i=
(c+d)/2
if(ki =
k){print(ri );go to End;}
else if(ki <
k){c=
i;}else {d=
i;}go to Loop;End: end;
[1,2,3,4,5,6,7,8,9],k=6,c=
1,d=
10,i=5
[1,2,3,4,5,6,7,8,9],k=6,c=
5,d=
10,i=7
[1,2,3,4,5,6,7,8,9],k=6,c=
5,d=
7,i=6
最悪log
2 (n+1)回
の探索で
所望のレコードが見つかる.時
間計算量は
O(log
2 n)である.
データベース論
北村
泰彦@
関西学院
大学
ブロック探索
c=1;
d=m
;w
hile(d<=
n) {if(k
d =k){
print(rd );go to End;}
if(kd >
k){i=
scan(rc ,rc+1 ,...,rc+
m-1 );
print(ri );go to End;}
else {c=
d+1;
d=d+
m-1;}}
End: end;
[(1,2,3),(4,5,6),(7,8,9)],k=8,c=
1,d=3
[(1,2,3),(4,5,6),(7,8,9)],k=8,c=
4,d=6
[(1,2,3),(4,5,6),(7,8,9)],k=8,c=
7,d=9
scan(7,8,9)
平均
(√n-1/2回
の探索で所望のレ
コードが
見つかる.時
間計
算量
はO
(√n)である.
データベース論
北村
泰彦@
関西学院
大学
インデックス法
データ部と索引部からなる.データ
部はレコードをキー順に格納した
ものである.索
引部はデータペー
ジの
先頭
レコードの
キー値
とその
データページへの
ポインタをペア
にした索引レコードを順に格納
したものである.
あるキー値をもつレコードの検索
は,検
索部
を探
索して読
むべ
きデ
ータページを特定
し,該
当するデ
ータページを読み
出せ
ばよい.
レコードをキー値の順に読み
出す
ことや
,データページを順
次読み
出すことも可
能である.
新たなレコードを追加する際には
,それより大きなキー値を持つレコ
ードを後にずらす必要があるの
で,
問題が生じる.
データベース論
北村
泰彦@
関西学院
大学
インデックス
• 社員
ファ
イル
はキ
ー社
員番
号に
対し
て非
順次
ファ
イル
(nonsequential
file)
•イン
デッ
クス
は社
員番
号に
対し
て順
次フ
ァイ
ル(s
equenti
al file)
インデックス
(index)はある要
素とその
ポインタ
(pointer)を示
す二
項リレーションで
ある.
データベース論
北村
泰彦@
関西学院
大学
インデックス
インデックスを生成することにより,所望の
レコードの位置決めが容易になる.
しかし,インデックスもまた大きなファイル
になることがあり,そのスキャンやサーチ
に時間がかかる.→
多段インデックス
(multilevel index)
データベース論
北村
泰彦@
関西学院
大学
多段インデックス
前提デ
ータ数:2
10
インデックス:5
段4分木
(45=
210)
アクセスコスト
スキャン:2
10÷2=
29=
512インデックス:(4
÷2)×
5= 10
インデックスは
二次
記憶
への
フェッチ回
数も削
減できる.
データベース論
北村
泰彦@
関西学院
大学
ISAMインデックス
データファイル
を順
次ファイル
化したもの
.
位置
決めに必
要なインデックスファイル
のアクセ
ス回数
を減らすことができる.
データベース論
北村
泰彦@
関西学院
大学
B-木ファイル
インデックスが
レコードの
挿入
や削
除に対
応して
動的
に変
化し,常
に高
効率
のレコードアクセスを
可能
とする.
ファイル
の更
新に伴
うインデックスの
保守
にコス
トが
かか
る.
n個
のレコードを格
納した
B木
の高
さは
O(log(n))
となるの
で,指
定したキー値
をもつレコードの
検索
のために読
み出
さなけれ
ばならないページ数
もこのオーダとなる.
ルートを除
いてディスク中
の各
ページの
空間
使用
効率
は最
低でも
50%である.
データベース論
北村
泰彦@
関西学院
大学
B木正
整数
dに対して,
d次の
B木
とは
ページをノードとして以
下の
条件
を満
たすル
ート付
木である.
ルートから各リーフノードまでのパスの長さは全て同じである.
ルート以外のノードはキー値の順に並んだ
i個の
(d≤i≤2d)のレコ
ード
R1 ,…
,Ri を
持つ.
ルートはキー値の順に並んだ
i個の
(1≤i≤2d)のレコード
R1 ,…
,Ri を
持つ.
i個のレコードをもつ非リーフノード
Nは
i+1個の子ノードポインタ
PTR1 ,…
,PTRi+
1 をもつ.ポインタ
PTRj (1≤j≤i+
1)の指す部分木に
格納されたすべてのレコードのキー値
Kは次の条件を満たす.た
だし
Key(Rj )は
Nのレコード
Rj の
キー値を表す.
j=1の
とき
K<Key(R
1 )i<
j<i+
1の
とき
Key(Rj-1 )<
K<Key(R
j )j=
i+1の
とき
Key(Ri )<
K
データベース論
北村
泰彦@
関西学院
大学
B木(d=
1)
データベース論
北村
泰彦@
関西学院
大学
B木レ
コード挿入の手順
挿入
レコードは
リーフノードに格
納することとする.挿
入レコードの
キー
値を用いて検索の際と同様に
B木
をたどり,レコードを格
納すべ
きリーフ
ノード
Nを特定する.
もし,
Nに入
っているレコード数
が2d
個未満ならば
,Nの適当な位置に挿
入レコードを格納して終了する.それ以外の場
合は以下による.
Nの
レコード数
が2d
個のときはオーバフローが生
じるのでノードの分割
を行う.まず,新たなノード
N'を
確保
し,挿
入レコードも含
めた
2d+1個
のレコードのうちキー値の小さい順
にd個
をNに,大
きい順
にd個
をN
'に格
納する.さらに,それらの中間のキー値をもつレコード
Rと
N'へ
のポインタ
PTR(N
')をペアにして,
Nの親ノードへ挿入する.
親ノードでは
Rと
PTR(N
')のペアを挿
入レコードと見
なして,上
記の
手順
と同
様の
処理
を行
う.ただし,ノードの
分割
がル
ートまで波
及し
Nがルート
となった場
合には
,親
ノードへ
Rと
PTR(N
')を挿入する代わりに,新たなノ
ードをルートとして確保し,
PTR(N
),R,PTR
(N')を
格納
する.この
時点
でB
木の
高さが
1増加することになる.
データベース論
北村
泰彦@
関西学院
大学
B木
キー値
26の
レコードを挿
入後
のB木
データベース論
北村
泰彦@
関西学院
大学
B木レ
コード削除
の手
順検
索の
際と同
様に
B木をたどり,削除対象レコードを格納
したノード
Nを特定する.
Nがリーフ
ノードか非
リーフノードかで以下
のように処
理が
異なる.
[Nが
リーフノードの場
合]
もし,
Nに入っているレコード数が
d+1個以上ならば,
Nから削除対象レコードを削除して終了する.そ
れ以外の場合は以下による.
Nの
レコード数
がd個のときはアンダーフローが
生じるので,
Nと親
ノードを共
有する
Nの右または
左の
ノード
N'を
調べ
る.いずれ
かの
ノード
N'の
レコード数
(iとする)が
d+1個以上ならば,
Nの削除対
象レコ
ード以
外の
d個
のレコード,
N'の
i個の
レコード,親
ノード中
のその
中間
のキー値
を持
つレコード
Rの
合計
d+i+
1個
のレコードを再配
分する.いま
N'が
Nの
右ノードとすると,上
記d+
i+1レコードの
うちキー値
の小
さい順
に(d+
i)/2をNに,大きい順に(d+
i)/2個を
N'に
格納する.さらに,その中間のキー値
をもつ
レコードを親
ノードの
Rの位置に格納して終了する.
N'が
Nの
左の
ノードの
場合
も同
様の
処理
をして終
了する.もし,
Nの
右および左
のいずれ
のノードの
レコード数
もd個の場
合は以下による.
Nとその右
または左の
ノード
N'を
融合する.いま,
N'が
Nの
右の
ノードとすると,
Nの
削除
対象
レコード以
外の
d-1個
のレコード,
N'の
d個のレコード,親ノード中のその中間のキー値をもつレコード
Rの
合計
2d個
のレコードをまとめて
Nに格納し
N'を
削除する.さらに,親ノードから
Rと
N'へ
のポインタ
PTR(N
')のペ
アを削除する.
N'が
Nの左
のノードの
場合
も同
様の
処理
をする.
親ノードでは
Rと
PTR(N
')のペアを削
除対
象レコードとみ
なして,上
の手
順と同
様の
処理
を行
う.ただし,
ノードの
融合
が波
及し
Nが
ルートとなった場
合には
,レコードに入
っているレコード数
が2個
以上
の場
合に行
うもの
とし,それ
以外
の場
合は
ルートを削除
する.この
時点
でB木
の高
さが
1減少することになる.
[Nが非リーフノードの場合
]削
除対
象レコードが
N中
のj番
目の
レコード
Rj の
場合,ポインタ
PTRj+
1 が指
す部分木の最も左のリーフノ
ード
N'の
先頭
レコード
R'を
Nの
Rj の
位置に格納する.
N'は
リーフノードであるのでその中の
R'を
上に述
べた手順で削除
する.
データベース論
北村
泰彦@
関西学院
大学
B木
キー値
22および
33の
レコードを削
除後
のB木
データベース論
北村
泰彦@
関西学院
大学
B+木B
+木は
B木と同様にページをノードとする
バランス木である.
レコードはリーフノードにのみ格納し(デー
タ部),非リーフノードにはキー値のみ格納
する(索引部).
データベース論
北村
泰彦@
関西学院
大学
B+木
データベース論
北村
泰彦@
関西学院
大学
ハッシュファイル
レコード
Ri の
キー値を適当なハッシュ関数を用いてハッシングし,格
納すべきパケットを決定するようにしたもの.
あるキー値を持つレコードの検索はキー値をハッシングしてバケット
を決定し,該当するページのみを読み出せばよい.新たなレコードを
挿入する際には,ハッシングで格納すべきバケットを決定する.もし
該当バケットに空きがない場合にはオーバーフロー処理を行う.レコ
ードの削除はバケット中で該当バケットを削除する.
あるキー値を持つレコードの検索が高速である反面,範囲検索やキ
ー値の順にファイル中のレコードを読み出すことは対応できない.