RDBMSアーキテクチャをさらっと理解する

最近は、NoSQL触ることが多いですが、RDBの仕組みについて学んでいきたいと思います。
web開発とかやり始めてもなかなかデータ・ベースの中身の仕組みまで学ぶのはなかなか難しい。
作りたいものとか他にあるし・・・
ただ、わかりやすく解説してる記事があったので、それをまとめていきたい

RDBはweb開発、最初に触れるデータ・ベースだと思います。
RDBとは、Relational DataBaseのことです。
有名どころでいえば、MySQLとかがそうですね
データ・ベースは、データを入れておく箱のようなものですが、RDBではデータを表形式で保存しています。複数の表(データ)を作って、表をくっつけたりできます。

RDBMSのアーキテクチャ

右の図がRDMSのアーキテクチャです。
入力されたSQLクエリは上から順に構文解析器から処理が実行されていきます。

RDBMSアーキテクチャ

構文解析器

ここで、クエリは構文解析されます。
構文解析とは入力された文字列をプログラムが実行できるように変換する過程のひとつです。
英語でいえば文章の構成要素をS・V・O・Cに分解していくことですね

構成要素を抽象構文木のデータ構造の形にすることで
どのようなSQL実行を行うかを解析していきます。

クエリプランナ

ここでは、抽象構文木から実行計画を作成します。
どのようなパラメータ・順序で実行していくかを決定します。

クエリエクスキュレータ

実行計画のとおりに次に出てくるアクセスメソッドを呼び出します。

アクセスメソッド

クエリエクスキュータに呼び出されたアクセスメソッドは、ディスク上にあるデータ構造をたどっていきます。
アクセスメソッドの中には、B+Treeのような複雑なデータ構造やアルゴリズムがあります。
ただ、実際のディスクの読み書きは次のバッファプールマネージャで行います。

バッファプールマネージャ

バッファプールマネージャでは、アクセスメソッドの要求に応じてディスク上のデータを貸し出します。

ただ、実際にディスクの読み書きは下層のディスクマネージャに任せます。
それでは、バッファプールマネージャを使う理由は何かというと
ディスクの遅さを隠蔽することにあります。

ディスクへのアクセスはメモリアクセスに比べると非常に遅いもので、データ読み込みのために毎度ディスクマネージャを呼び出すと効率が悪いものになります。

そこで、バッファプールマネージャではデータをメモリ上にキャッシュすることで、性能を効率化します。
一度読み込んだデータはメモリ上に保存し、それ以降にはメモリ上のデータを用います。

ディスクマネージャ

ディスクマネージャではバッファプールマネージャの要求に従って、データをディスクから読み出したり、書き込みます。