コンテンツにスキップ

RDBMS@DB系ミドルウェア

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. RDBMS (関係DB管理システム) の仕組み

RDBMSの種類

RDBMS RDB
MariaDB MariaDBのDB
MySQL MySQLのDB
PostgreSQL PostgreSQLのDB


アーキテクチャ

RDBMSは、リレーショナルエンジン、DBエンジン (ストレージエンジン) 、から構成される。

DB管理システムの仕組み


02. RDBMS

リレーショナルエンジン

記入中...


DBエンジン (ストレージエンジン)

▼ DBエンジンとは

『ストレージエンジン』ともいう。

RDBMSがDBに対してデータのCRUDの処理を行うために必要なソフトウェアのこと。

▼ DBエンジンの種類

RDMS (例:MySQL、PostgreSQLなど) によって、対応するDBエンジンが異なる。

  • InnoDB
  • Memory
  • CSV


RDB (関係DB)

▼ RDBとは

データ同士がテーブル状に関係を持つデータ格納形式で構成されるのこと。

NoSQLとは異なり、データはストレージに保管する。

▼ テーブル

行列からなるデータのセットのこと。

▼ カラム

テーブルの列データのこと。

▼ レコード

テーブルの行データのこと。


オンディスクDB

RDBは、ストレージにデータを保存する。

ストレージ (例:HDD、SSD) 上にデータを保管するDBを、メモリ上に保管することと比較して、オンディスクDBという。


DBパーティション

▼ DBパーティションとは

DBのテーブルを分割して管理する。

性能の向上のために、DBパーティションを作成する。

分割しても、DBMSクライアントからは単一のテーブルとして扱える。

▼ 水平パーティション (シャーディング)

『シャーディング』ともいう。

テーブルをレコード方向に分割して管理する。

▼ 垂直パーティンション

テーブルをカラム方向に分割して管理する


DBインデックス

▼ DBインデックスとは

テーブルから特定のカラムのみを抜き出し、検索しやすいように並び替え、名前を付けて保管しておいたもの。

性能の向上のために、DBインデックを作成する。

DBインデックスとして保管されたカラムから特定のレコードを直接的に取得できる。

そのため、SQLの実行時間がカラム数に依存しなくなる。

DBインデックスを使用しない場合、SQLの実行時に全てカラムを取得するため、実行時間がテーブルのカラム数に依存してしまう。

▼ クラスターDBインデックス

プライマリーキーあるいはユニークキーのカラムを基準にして、テーブルのカラムを並び替えたDBインデックスのこと。

CREATE INDEX foo_index
    ON foo_table (id)

▼ セカンダリーDBインデックス

プライマリーキーあるいはユニークキーではないカラムを基準にして、テーブルのカラムを並び替えたDBインデックスのこと。

CREATE INDEX foo_index
    ON foo_table (foo_column)

▼ 複合DBインデックス

複数のカラムを基準にして、テーブルを並び替えたDBインデックスのこと。

対象としたカラムごとに異なる値のレコード数が計測され、この数が少ない (一意の値の多い) カラムが検出される。

そして、カラムのレコードの昇順で並び替えられ、DBインデックスとして保管される。

CREATE INDEX foo_index
    ON foo_table (foo_column, bar_column, ...)

*例*

以下のようなfooテーブルがあり、nameカラムとaddressカラムを基準に並び替えたfoo_indexという複合DBインデックス名を作成する。

CREATE INDEX foo_index
    ON foo_table (name, address)
id name address old
1 Suzuki Tokyo 24
2 Yamada Osaka 18
3 Takahashi Nagoya 18
4 Honda Tokyo 16
5 Endou Tokyo 24

各カラムで値の異なるレコード数が計測され、nameカラムはaddressカラムよりも一意のレコードが多いため、nameカラムの昇順 (アルファベット順) に並び替えられ、DBインデックスとして保管される。

id name address old
5 Endou Tokyo 24
4 Honda Tokyo 18
1 Suzuki Tokyo 24
3 Takahashi Nagoya 18
2 Yamada Osaka 18


04. RDBMSクライアント

クエリ

▼ クエリとは

RDBMSの種類に応じたクエリが必要になる。

▼ クエリパッケージ

クエリの実装の抽象度に応じて、パッケージがある。

クエリパッケージ 説明
生のクエリ RDB固有のクエリのこと。
クエリビルダー RDB固有のクエリを実装しやすくしたパッケージのこと。
ORM アプリケーション側にDBテーブルに対応したモデルを定義し、これを使用してRDBに固有のクエリを送信するパッケージのこと。


DBコネクション

▼ DBコネクションとは

アプリからRDBMSへのクエリ送信時の通信のこと。

TCP/IPプロトコルを使用する。

▼ DBセッション

ログインに成功したDBコネクションのこと。

セッションを確立できると、クエリを送信できるようになる。

一つのセッション中に一つのトランザクション (複数のクエリからなる) を実行することになる。

▼ コネクションプロキシ

アプリケーションとDBの間に、コネクションプールプロキシ (例:ProxySQL、PgBouncerなど) を配置する。

これにより、アプリケーションサーバーのコネクションプールの処理をコネクションプロキシに委譲する。

注意点として、プリペアードステートメントでは既存のコネクションを再利用する必要があるが、コネクションプロキシでは別のコネクションを使用してしまうことがある。

そのため、コネクションプロキシの採用時には、プリペアードステートメントを使用できない。

▼ コネクションプール

アプリからDBへのクエリ送信時に新しく作成したコネクションを、非アクティブ状態として保持しておき、以降のクエリ送信時に再利用する。

一定回数再利用されたり、一定期間使用されていないコネクションは削除される。

db_connection-pool


05. 性能指標

秒当たりの平均トランザクション数 (TPS:Transaction Per Second)