データベースエンジン

データベースエンジン(またはストレージエンジン)は、データベース管理システム(DBMS)がデータベースからデータを作成、読み取り、更新、削除(CRUD)するために使用する基盤となるソフトウェアコンポーネントです。ほとんどのデータベース管理システムには独自のアプリケーションプログラミングインターフェース(API)が備わっており、ユーザーはDBMSのユーザーインターフェースを介さずに基盤となるエンジンと対話できます。

「データベースエンジン」という用語は、「データベースサーバー」や「データベース管理システム」と頻繁に同じ意味で使用されます。「データベースインスタンス」とは、実行中のデータベースエンジンのプロセスとメモリ構造を指します。

ストレージエンジン

現代のDBMSの多くは、同じデータベース内で複数のストレージエンジンをサポートしています。例えば、MySQLはMyISAMに加えてInnoDBサポートしています

一部のストレージ エンジンはトランザクション型です。

名前ライセンストランザクション互換性注記
アリアGPLいいえMariaDBMySQL
ファルコンGPLはいMySQL製造中止
インノDBGPLはいMySQLとMariaDBMySQLとMariaDBのデフォルト
メモリGPLいいえMySQLとMariaDB
マイISAMGPLいいえMySQLMySQLのデフォルトだった
インフィニDBGPLいいえ
徳DBGPLはいMySQLとMariaDBフラクタルツリーインデックスを使用
ワイヤードタイガーGPLはいモンゴDBMongoDBのデフォルト
エクストラDBGPLはいMariaDB とMySQL 用の Percona Server
RocksDB /マイロックスGPL v2またはApache 2.0はいArangoDBCassandra、MariaDB、MongoDB、MySQL、SurrealDB

その他のエンジンタイプは次のとおりです。

設計上の考慮事項

データベース内の情報はビット形式で保存され、ストレージハードウェア上のデータ構造にレイアウトされます。これらのデータ構造は、ストレージハードウェアへの効率的な読み書きのために設計されています。通常、ストレージハードウェア自体は、データベースを含む、ストレージを広範に利用する様々なシステムの要件を満たすように設計されています。運用中のDBMSは常に複数の種類のストレージを同時に利用します。フラッシュメモリや外部ディスクストレージなど、これらの異なるストレージの種類には、それぞれ異なるデータレイアウト方法が必要です。

原理的には、データベースストレージは、すべてのデータビットが一意のアドレスを持つ線形アドレス空間と見なすことができます。実際には、アドレスのごく一部のみが初期参照点として保持され、これもストレージを必要とします。ほとんどのデータは、変位計算(参照点からのビット単位の距離)と、必要なすべてのデータへのアクセスパス(ポインタを使用)を効率的に定義するデータ構造を用いた間接参照によってアクセスされ、必要なデータアクセス操作に合わせて最適化されます。

データベースストレージ階層

データベースは、動作中、複数の種類のストレージに同時に存在し、ストレージ階層を形成します。DBMSをホストする現代のコンピュータ内部では、「データベース」部分の大部分は、部分的に複製された状態で揮発性ストレージに存在します。現在処理・操作されているデータは、プロセッサ内部、場合によってはプロセッサのキャッシュに存在します。これらのデータは、通常、揮発性ストレージコンポーネントであるコンピュータバスを介してメモリから読み書きされます。コンピュータメモリは、通常、標準のストレージインターフェースまたはネットワーク(例:ファイバーチャネルiSCSIを介して外部ストレージとデータを通信します。

ストレージアレイは一般的な外部ストレージユニットであり、通常、独自のストレージ階層を備えています。高速キャッシュは、通常、揮発性DRAMと高速DRAMで構成され、標準インターフェースを介してドライブに接続されます。これらのドライブは、フラッシュドライブ不揮発性磁気ディスクドライブなど、速度が異なる場合があります。速度と価格は一般的に相関関係にあります。ドライブは磁気テープに接続される場合があり、磁気テープには大規模データベースの中で最も使用頻度の低い部分が格納されていることがあります。また、バックアップも磁気テープ上に保存されることがあります。

データ構造

データ構造は、明確に定義された方法でデータを埋め込む抽象構成です。効率的なデータ構造により、効率的な方法でデータを操作できます。データ操作には、さまざまなモードでのデータの挿入、削除、更新、取得が含まれます。特定のデータ構造タイプは、特定の操作では非常に効果的ですが、他の操作では非常に効果的でない場合があります。データ構造タイプは、DBMS の開発時に、含まれるデータのタイプに必要な操作を最適に満たすように選択されます。特定のタスクに選択されるデータ構造のタイプでは、通常、それが存在するストレージのタイプも考慮されます (アクセス速度、アクセスされるストレージ チャンクの最小サイズなど)。一部の DBMS では、データベース管理者は、パフォーマンス上の理由から、ユーザー データを格納するためのデータ構造のオプションを柔軟に選択できます。データ構造には、データベースのパフォーマンスを調整するために選択可能なパラメーターがある場合があります。

データベースは様々なデータ構造でデータを保存することができます。[1]一般的な例は以下のとおりです。

データの方向付けとクラスタリング

従来の行指向とは対照的に、リレーショナル データベースは、特定の構造でデータを格納する方法において、列指向または相関指向になることもできます。

一般的に、通常は一緒に使用される異なる種類のデータベースオブジェクトをストレージ内に近接して配置し、「クラスタ化」することで、パフォーマンスが大幅に向上します。これにより、必要な関連オブジェクトをストレージから最小限の入力操作(場合によってはそれぞれにかなりの時間がかかる)で取得できるようになります。インメモリデータベースの場合でも、クラスタ化はメモリ内の入出力操作に大容量のキャッシュを共通で利用することでパフォーマンス上の利点をもたらし、結果として同様の動作を実現します。

例えば、在庫にある「商品」のレコードを、それに対応するすべての「注文」レコードとクラスタリングすると効果的かもしれません。特定のオブジェクトをクラスタリングするかどうかの判断は、オブジェクトの利用統計、オブジェクトサイズ、キャッシュサイズ、ストレージタイプなどに基づいて行われます。

データベースのインデックス作成

インデックスは、一部のストレージエンジンがデータベースのパフォーマンス向上のために使用する手法です。多くの種類のインデックスには共通点があり、クエリ実行時にすべてのエントリを調べる必要性が軽減されます。大規模なデータベースでは、これによりクエリの時間とコストを大幅に削減できます。最も単純な形式のインデックスは、エントリの位置を示す隣接参照を用いたバイナリサーチを使用して検索できる、ソートされた値のリストです。これは、本の巻末の索引に似ています。同じデータに複数のインデックスを設定できます(従業員データベースに姓と入社日でインデックスを設定するなど)。

インデックスはパフォーマンスに影響を与えますが、結果には影響を与えません。データベース設計者は、アプリケーションロジックを変更することなくインデックスを追加または削除できるため、データベースの拡張や利用方法の変化に伴うメンテナンスコストを削減できます。インデックスはデータアクセスを高速化しますが、データベースの容量を消費し、データが変更されるたびに更新する必要があります。つまり、インデックスはデータアクセスを高速化しますが、データメンテナンスを遅くします。これらの2つの特性によって、特定のインデックスがコストに見合う価値があるかどうかが決まります。

参考文献

  1. ^ Lightstone, S.; Teorey, T.; Nadeau, T. (2007).物理データベース設計:インデックス、ビュー、ストレージなどを活用するためのデータベースプロフェッショナルガイド. Morgan Kaufmann Press. ISBN 978-0-12-369389-1
  • https://web.archive.org/web/20100330045149/http://dev.mysql.com/tech-resources/articles/storage-engine/part_3.html
  • MySQL 管理者バイブル 第 11 章「ストレージエンジン」
「https://en.wikipedia.org/w/index.php?title=Database_engine&oldid=1296092479」から取得