データベース

第7章 データベース管理システム
7.1 データベース管理システムの概要
7.2 データベースの格納方式
7.3 問合せ処理
7.2 データベースの格納方式
1.記憶装置とデータの格納
(a) ディスクのアクセス単位
データベースは通常ディスクに格納される。
【ディスクのアクセス単位】
①ディスクは,シリンダ,トラック,セクタなどの単位に分割される。
②データは、セクタの整数倍の大きさのページ(またはブロック)と呼ばれる
単位でアクセスされる。
【注意】
用語については、機種またはOS依存なので、
利用ハードウェア等のマニュアル等を参照。
(b) タプルの格納
表のタプルは、DBMS内部では通常レコードと呼ばれる。
【DBMS内部の呼び方】
①レコード
②フィールド
③同一形式のレコードの集まり
: フィールドの集まり
: タプルの属性
: ファイル
(c) 固定長と可変長ということ
固定長レコードと可変長レコード
①可変長レコードの方が複雑な格納方法
②画像や音声データなど、サイズの大きな属性の場合、工夫が必要
【例】
画像ファイルを別に格納し、属性ではファイル名を指定する。
(d) ファイル内レコードの基本操作
①
②
③
④
読込(read)
追加(append)
変更(update)
削除(delete)
ファイル全体では、
⑤ オープン(Open)
⑥ クローズ(Close)
(e) 格納方式(アクセス法)
容量、検索や更新の効率に考慮して格納方式を決める。
①ヒープ(heap: 積み重ねた山、堆積等の意味)
②索引編成(index access)
③B木(Balance Tree/Bush Tree:平衡木/潅木)
最も単純なものが2分B木
④ハッシング(Hashing: ごちゃまぜの意味)
2.ヒープ(heap)
・・・最も単純
キー値とは無関係に発生順等によりファイル内に格納する。
①ファイル内を順番に読んでいくので検索などの効率が悪い。
②二次索引を付加して検索を効率化する工夫が行われる。
③ 空き領域にレコード追加を行う。
④ レコードの削除はページ内空き領域に戻すことで行う。
3.索引編成(index access)
(a) 構成の概要
レコードは、キーの順序で整列して格納
(キーの最大値を索引に用いているが、最小値でも良い)
索引
007
015
データレコード
001
003
005
007
009
011
013
015
017
018
021
023
023
多量の索引を持つことができるよう、階層構造にする場合もある。
(b) 領域の管理
① ある程度余裕を持った大きさにして、あらかじめ空き領域を設
けておく。
② オーバフロー領域と呼ばれる共通領域を設けておく。
③ レコードの追加は、キー値により該当位置を決め、空き領域
に書き込む。
④ 該当位置に追加できなくなったら、オーバフロー領域に書き
込む。
⑤ キー以外のレコード変更は該当レコードを書き換える。
⑥ キー値の変更は、一旦削除して追加する。
⑦ 削除は、レコードを空き領域に戻す。
⑧ レコード追加や削除が何回も続くと、ファイルアクセス効率が
悪化するので、再編成を行う。
(c) 索引編成の特徴
① 索引を用いるので高速になる。
② キー値を一つ指定するだけでなく不等号で指定した検索も高
速である。
③ レコード追加や削除が頻繁に行われる場合、アクセス効率が
悪化する。ただし、再編成で効率化できる。
4.B木(Balance Tree)
(a) 構成の概要
① 高さが揃った木構造。
② データは一番下の階層(葉ノード)に格納。
③ データ追加や削除では、必要に応じて木構造を変更して高さの変更を保
つ(アルゴリズムについては他の文献参照)。
④ 葉ノードから次の葉ノードへのリンクによって順次アクセスが可能。
32
12
5
8
12
80
22
14
48
18
22
74
24
28
89
32
95
・・・ レコード ・・・
(b) アクセス方法
①
②
③
④
⑤
⑥
キー値を指定した読み出しは、木のルートから索引をたどることで行う。
不等号条件の場合、葉ノード間のリンクを用いて順次アクセスを行う。
レコード追加は、キー値で位置を決める。
葉ノードに空きがなければ、レコードを分割して木構造を変更する。
削除時は該当レコードの削除で行う。
該当葉ノードの空きが一定以上になると、ノードの統合を行う。
(c) B木の特徴
① 中間部は索引部専用なので、1ページに多くのリンクを入れることができる。
② 木の高さは通常3階層程度なので、高速な検索が可能。
③ 木の構造を動的に変更することで、データ更新の頻度が多くても効率の良い
アクセスができる。
5.ハッシング(Hashing)
(a) 方法の概要
ハッシングと呼ばれる関数によってキー値をレコード位置に変換する。
・・・直接編成法(Direct Access)のひとつ・・・
キー値
ハッシュ関数
レコード位置
格納レコード
(b) ハッシング法
さまざまな方法があるので、
アルゴリズム関係の書籍で確認しておこう。
(キー値によりランダムにかつバランスよく配置されるものがよい)
・除算法
・重合せ法
・基数変換法
・数字分解法
(c) ハッシング法のバラエティ
① レコード位置を直接求めるのではなく、レコード位置を記録し
た変換表内の位置を求める方法。
② 格納するレコード数をあらかじめ指定する必要があるが、レ
コード数の増減に柔軟に対応する拡張可能ハッシング。
キー値
ハッシュ関数
変換表
アドレス
レコード位置
ファイル
レコード
(d) ハッシング法によるアクセス
① キー値をハッシングしてファイル内の位置を決めてレコードを
読み込み、あるいは更新する。
② レコード追加は、キー値をハッシングしてファイル内の位置を
決めて行う。
② キーが衝突したら、キー衝突のための処理を行う。
③ 削除は、該当位置を空きとする。
(e) ハッシング法の特徴
① キー値を指定したアクセス効率がよい。
② 不等号等によるキー値の範囲指定アクセスの効率が悪い。
③ 異なったハッシュ値が同じ値になる(衝突)ことがあるので対
策が必要である(アルゴリズム関連の書籍参照)。