データベースエンジンは、
データベース管理システム(DBMS)が
データベースに対してデータの作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)を行うための基盤となるソフトウェアコンポーネントです。ストレージエンジンとも呼ばれ、DBMSの中核部分を担っています。
ほとんどのDBMSは、ユーザーインターフェースを介さずに、APIを通じて
データベースエンジンと直接対話するためのインターフェースを提供しています。APIは、TCP/IPの特定のポート番号を用いて通信を行う場合があります。
「
データベースエンジン」という用語は、「
データベースサーバー」や「
データベース管理システム」と同じ意味で使用されることもありますが、「
データベースインスタンス」は、実行中の
データベースエンジンのプロセスとメモリ構造を指します。
ストレージエンジン
現代のDBMSの多くは、同一
データベース内で複数のストレージエンジンをサポートしています。例えば、
MySQLは
InnoDBと
MyISAMの両方をサポートしています。
ストレージエンジンには、
トランザクション処理をサポートするものとそうでないものがあります。
エンジンの種類
設計上の考慮事項
データベース内の情報は、ハードウェアの特性に合わせて効率的に読み書きできる
データ構造として、ビット単位で格納されます。通常、ストレージ自体は、広範囲な領域の要件を満たすように設計されており、DBMSは、メモリや外部ストレージなど、複数の種類のストレージを同時に利用します。
原則として、
データベースストレージは線形アドレス空間として扱われ、データは参照ポイントからの距離によってアクセスされます。ほとんどのデータは、ポインタを使用するなど、データアクセス操作に最適化された方法で間接参照されます。
データベースは、動作中に複数のストレージタイプに同時に存在し、ストレージ階層を形成します。処理中のデータは、プロセッサ内やキャッシュ、メモリに存在し、必要に応じて外部ストレージとデータのやり取りが行われます。
外部ストレージユニットであるストレージアレイは、DRAMのような高速キャッシュから、フラッシュドライブや磁気
ディスクドライブ(不揮発性)まで、独自のストレージ階層を持っています。さらに、
磁気テープのような低速なストレージも、大規模な
データベースバックアップに使用されます。
一般的に、ストレージの速度とコストは相関関係にあり、高速なストレージは揮発性である傾向があります。
データ構造は、データを効率的に操作するための抽象的な構造です。効率的な
データ構造により、データの挿入、削除、更新、取得を効率的に行うことができます。特定の
データ構造は、特定の操作に非常に効果的ですが、他の操作にはそうではありません。
DBMSの開発では、データ型に必要な操作に合わせて
データ構造が選択されます。選択された
データ構造は、アクセス速度やストレージチャンクのサイズなど、ストレージの種類も考慮して決定されます。
一部のDBMSでは、パフォーマンス上の理由から、ユーザーが
データ構造を柔軟に選択できる場合があります。
データ構造には、パフォーマンス調整のためのパラメーターが用意されていることもあります。
データベースで使用される一般的な
データ構造には、以下のようなものがあります。
データの方向付けとクラスタリング
従来の行指向とは対照的に、関係
データベースは列指向または相関型でデータを格納することもできます。
通常、一緒に使用されるオブジェクトを近接したストレージに配置する「クラスタリング」によって、パフォーマンスが向上します。これにより、必要なオブジェクトを最小限の入力操作で取得できます。インメモリ
データベースでも、キャッシュの使用により同様の動作が見られます。
例えば、「アイテム」のレコードを、対応する「注文」レコードとクラスタリングすると便利です。クラスタリングの決定は、オブジェクトの使用率、サイズ、キャッシュサイズ、ストレージの種類などに依存します。
インデックス作成は、ストレージエンジンが
データベースのパフォーマンスを向上させるために使用する手法です。インデックスは、クエリ実行時にすべてのエントリを調べる必要性を減らす点で共通しており、大規模な
データベースではクエリ時間を大幅に削減できます。
インデックスは、ソートされた値のリストと、エントリの場所への参照を使用します。複数のインデックスを同じデータに設定することも可能です。
インデックスはパフォーマンスには影響しますが、結果には影響しません。
データベース設計者は、アプリケーションロジックを変更せずにインデックスを追加・削除できるため、拡張や使用状況の変化に伴うメンテナンスコストを削減できます。ただし、インデックスはデータアクセスを高速化できる一方で、データ変更時に更新が必要なため、データの保守は遅くなります。インデックスの導入は、これらのバランスを考慮して決定する必要があります。