10-データベース

データベース(Part.8)| DBMSの仕組みと効率的なデータアクセス機構 | 現役エンジニア&プログラミングスクール講師

目標

「DBMSの仕組み」について概要を理解する
「効率的なデータアクセス機構」について概要を理解する

DBMSの仕組み

DBMSの機能

データベースマネジメントシステムには次のような主な機能がありました。

①「データベース言語の提供」
データベースの定義・操作・制御などを行う言語を利用できる

②「効率的なデータアクセス機構」(この記事で扱います)
データの効率的な格納方法の提供・インデックス設定による検索処理の効率化・問い合わせ最適化機能の提供

③「保全機能(整合性の維持)」
データの整合性を保証するための機能

④「機密保護」
ユーザーへのアクセス権限の付与を提供し不正アクセスを防止する機能

⑤「排他制御(同時実行の制御)」
複数の処理を同時に行ったときに矛盾が起きないようにする機能

⑥「障害復旧」
システムの障害やトラブルに対してデータベースを復旧する機能

これらの機能を少しずつ見ていきたいと思います。
(データベース言語の提供については実際の操作で確認)

効率的なデータアクセス機構の概要

問い合わせ最適化機能の提供

問い合わせに対する処理のフロー:データベースに対してユーザーから問い合わせ(SQLの入力など)があるとDBMSでは次のような流れで処理が行われていきます。

この流れは基本情報技術者試験でも よく問われる内容です

まず、ユーザーからSQL文が入力されるとその問い合わせに対して構文解析が行われます。

続けて、構文解析木は最適化器に渡されて処理木を利用して最適化された実行プランを出力します。

その後、コード生成器では出力された実行プランに基づいた実行コードが生成されます。

最後にエグゼキューターによって実行コードが実行され結果リレーションをユーザー側に出力します。

問い合わせに対する最適化は上のような処理フローで行われています。

データの効率的な格納方法の提供(内部スキーマ)

RDBMSでは実際にデータが格納される場所をファイルと呼びます。このファイルは「ページ」と「エクステント」で管理されています。

  1. ページ…RDBMSで扱うディスク領域の基本単位
  2. エクステント…テーブルやインデックスを構成する基本単位で、連続するページで構成される
データの格納方式

ファイルに対してはデータの格納方法に次のようなルールを指定することができます。

  1. 順序なしの格納…レコードの追加順で格納されます。
  2. 順序ありの格納…レコードが主キーを基に昇順降順で並びかえて格納されます。
  3. ハッシュによる格納…ハッシュ関数を利用してレコードが格納されます。

インデックス設定による検索処理の効率化(内部スキーマ)

データの格納場所の検索方式

データへのアクセス方法(検索方法)には次のようなものがあります。

  1. 探索法…順序ありの格納の場合に検索する値とデータの中央の値の比較を繰り返しながら格納場所を特定する。(二分探索)
  2. スキャン法…順序なしの格納の場合に全件を格納された順番で参照して格納場所を特定する。(線形探索)
  3. ハッシュ法…ハッシュ関数を利用して格納場所を特定する。
  4. インデックス法…「非平衡木のISAMインデックス」と「平衡木のB木、B+木」などがあります。インデックス法ではインデックスファイルを作成して検索を行います。

【インデックスでの検索の具体例】

例えば下のような書籍テーブルがあった場合、主キーでは検索を高速に行うことができます(主キーはインデックスがかかっている)が、タイトルで検索を行おうとした場合は並び順がバラバラなため検索を高速に行えません。

主キータイトル出版社発売日
001さんびきのこぶた出版社NNG20170501
002ももたろう出版社BFG20211214
003あかずきんちゃん出版社ERK20180722
….
9999いっすんぼうし出版社ZER20150930

これに対してインデックスファイルを作成すると次のようになります。インデックスファイルはインデックスに指定したカラムを昇順に並び替えたカラム(この場合はタイトル順)とそのデータが存在している元のリレーションにあるタプルの位置を示すポインタ(住所)で構成されます。

タイトルポインタ
あかずきんちゃん000004744
いっきゅうさん000073843
いっすんぼうし000092973
うらしまたろう000072837
ももたろう000004738
わらしべちょうじゃ000008443

インデックスファイルを利用して検索を行うと、検索時には並び替えられたタイトルで検索をし、探し当てたらポインタを利用して書籍テーブルからタプルを抽出するといった動きになります。

「非平衡木のISAMインデックス」は検索時間にバラつきがあります。
「平衡木のB木、B+木」は高速に検索が行え、範囲を指定した検索にも利用できます。

インデックスは利用すれば良いというものではなく、データの件数が少ない場合はインデックスを利用するメリットがあるかを考える必要があります。

実はインデックスを作成すればするほど、データの追加や更新時のインデックスファイルの形状維持のオーバーヘッドの方がデータベースにとって負担になり返って検索以外の処理(データの追加や更新)を遅くすることがあります。

データの件数が少ないのであればインデックスを利用しなくてもそれなりの検索が行えるのでバランスを考えて作成を検討します。検索の負荷が多いくらいのデータ量があればインデックスを作成します。

今回は以上になります。

「データベース」おすすめ書籍6選【初心者用3冊&実践用3冊】| 現役エンジニア&プログラミングスクール講師「データベース」初心者の方がデータベースを基本からしっかりと理解するためのお勧めの書籍について取り上げています。また中級者の方が更に進んだ学習ができる実践的な書籍についてお勧めできる3冊を取り上げています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
10-データベース

データベース(Part.2)| 3層スキーマの概要 | 現役エンジニア&プログラミングスクール講師

2023年3月31日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
10-データベース

データベース(Part.6)| リレーションと整合性制約 | 現役エンジニア&プログラミングスクール講師

2023年4月5日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
10-データベース

データベース(Part.4)| 概念モデルから論理モデルへの変換(概念スキーマ)| 現役エンジニア&プログラミングスクール講師

2023年4月3日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
10-データベース

データベース(Part.7)| リレーショナル代数 | 現役エンジニア&プログラミングスクール講師

2023年4月6日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
10-データベース

データベース(Part.11)| MariaDB SQLと表の種類&SQLコマンド例 | 現役エンジニア&プログラミングスクール講師

2023年4月13日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
10-データベース

データベース(Part.3)| 概念モデルと論理モデル(概念スキーマ)| 現役エンジニア&プログラミングスクール講師

2023年4月1日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site