1. MySQL アーキテクチャ ストレージ エンジンを紹介する前に、まずは MySQL アーキテクチャを紹介し、ストレージ エンジンが MySQL システム全体のどこを占めるかを誰もが理解できるようにしましょう。次の図は公式のアーキテクチャ図です。 MySQL アーキテクチャ図 上の図からわかるように、MySQL は次の部分で構成されています。
MySQL データベースを他のデータベースと区別する最も重要な機能は、プラグイン テーブル ストレージ エンジンです。上の図からわかるように、MySql は多くの種類のストレージ エンジンをサポートしています。ストレージ エンジンはデータベースではなくテーブルに基づいていることに注意することが重要です。 2. MySql ストレージ エンジン プラグイン ストレージ エンジンの利点は、特定のアプリケーションの特性に応じて異なるストレージ エンジンを選択できることです。以下は、MySQL でよく使用されるいくつかのストレージ エンジンです。 2.1 InnoDB ストレージ エンジン InnoDB ストレージ エンジンはトランザクションをサポートし、主にオンライン トランザクション処理 (OLTP) アプリケーション向けに設計されています。その機能には、行ロック設計、外部キーのサポート、Oracle と同様の非ロック読み取りサポート (つまり、デフォルトの読み取り操作ではロックが生成されない) が含まれます。 MySQL データベース バージョン 5.5.8 以降では、InnoDB ストレージ エンジンがデフォルトのストレージ エンジンになります。 InnoDB は、マルチバージョン同時実行制御 (MVCC) を使用して高い同時実行性を実現し、4 つの SQL 標準分離レベルを実装します。デフォルトは REPEATABLE レベルです。同時に、ファントム リーディングを回避するために、次のキー ロックと呼ばれる戦略が使用されます。さらに、InnoDB ストレージ エンジンは、挿入バッファ、二重書き込み、アダプティブ ハッシュ インデックス、先読みなどの高パフォーマンスおよび高可用性機能も提供します。 テーブル内のデータの保存には、InnoDB ストレージ エンジンがクラスター化されたアプローチを使用するため、各テーブルのストレージは主キーの順序で保存されます。テーブルを定義するときに主キーを明示的に指定しない場合、InnoDB ストレージ エンジンは行ごとに 6 バイトの ROWID を生成し、それを主キーとして使用します。 2.2 MyISAM ストレージエンジン MyISAM ストレージ エンジンはトランザクションやテーブル ロック設計をサポートしていませんが、フルテキスト インデックスをサポートしており、主に一部の OLAP データベース アプリケーションを対象としています。さらに、MyISAM ストレージ エンジンのもう 1 つのユニークな機能は、バッファー プールがデータ ファイルではなくインデックス ファイルのみをキャッシュすることです。これは、ほとんどのデータベースとは大きく異なります。 MySQL 5.0 以降、MyISAM はデフォルトで 256 TB の単一テーブル データをサポートしており、これは一般的なアプリケーション要件を満たすのに十分です。 2.3 メモリストレージエンジン メモリ ストレージ エンジン (旧称 HEAP ストレージ エンジン) は、テーブル データをメモリに保存します。データベースが再起動されるかクラッシュすると、テーブル内のデータは消えてしまいます。一時データを格納する一時テーブルや、データ ウェアハウス内の緯度テーブルに適しています。メモリ ストレージ エンジンは、使い慣れた B+ ツリー インデックスの代わりに、デフォルトでハッシュ インデックスを使用します。 メモリ ストレージ エンジンは非常に高速ですが、使用に際しては一定の制限があります。たとえば、テーブル ロックのみがサポートされ、同時実行パフォーマンスが低く、TEXT および BLOB 列タイプはサポートされません。最も重要なのは、可変長フィールド (varchar) が固定長フィールド (char) と同じ方法で保存されるため、メモリが浪費されることです。 さらに、見落とされがちな点の 1 つは、MySQL データベースがクエリの中間結果セットを保存するためにメモリ ストレージ エンジンを一時テーブルとして使用することです。中間結果セットがメモリ ストレージ エンジン テーブルの容量設定よりも大きい場合、または中間結果に TEXT または BLOB 列タイプのフィールドが含まれている場合、MySQL データベースはそれを MyISAM ストレージ エンジン テーブルに変換し、ディスクに保存します。前述したように、MyISAM はデータ ファイルをキャッシュしないため、この時点で生成される一時テーブルのパフォーマンスはクエリに対して失われます。 2.4 アーカイブストレージエンジン アーカイブ ストレージ エンジンは、INSERT および SELECT 操作のみをサポートし、MySQL 5.1 以降のインデックスをサポートします。アーカイブ ストレージ エンジンは、zlib アルゴリズムを使用してデータ行を圧縮し、最大 1:10 の圧縮率で保存します。名前が示すように、アーカイブ ストレージ エンジンは、ログ情報などのアーカイブされたデータを保存するのに適しています。アーカイブ ストレージ エンジンは、行ロックを使用して高同時挿入操作を実装しますが、トランザクション セーフ ストレージ エンジンではありません。その設計目標は、主に高速挿入および圧縮機能を提供することです。 もちろん、MySql は他の多くのストレージ エンジンもサポートしていますが、ここでは 1 つ 1 つリストされていません。 3. ストレージエンジンの比較 ストレージ エンジンはテーブルのストレージ構造として理解でき、各ストレージ エンジンは異なる機能をサポートします。 MySQL はプラグイン ストレージ エンジンをサポートしており、データ テーブルごとに異なるストレージ エンジンを指定できます。一般的に使用されるストレージ エンジンの特徴は次のとおりです。 次のコマンドを使用して、現在のデータベースがサポートしているストレージ エンジンを確認することもできます。 -- サポートされているストレージ エンジンを表示します。show engines; 以下は、最も一般的に使用される 3 つのストレージ エンジンの簡単な概要です。
したがって、デフォルトのストレージ エンジン (INNODB) を盲目的に選択するのではなく、アプリケーションの特定のニーズに応じて適切なストレージ エンジンを選択する必要があります。 コミット、ロールバック、リカバリに対するトランザクションの安全性 (ACID 準拠) 機能を提供し、同時実行制御が必要な場合は、InnoDB が適切な選択肢です。データ テーブルが主にレコードの挿入とクエリに使用される場合、MyISAM エンジンはより高い処理効率を提供します。一時的にデータを保存するだけでよく、データ量が多くなく、高いデータセキュリティが要求されない場合は、メモリ内の MEMORY エンジンにデータを保存することを選択できます。MySQL は、このエンジンを一時テーブルとして使用して、クエリの中間結果を保存します。 INSERT および SELECT 操作のみの場合は、アーカイブ エンジンを選択できます。アーカイブ ストレージ エンジンは、高同時挿入操作をサポートしますが、トランザクション セーフではありません。アーカイブ ストレージ エンジンは、アーカイブされたデータの保存に非常に適しています。たとえば、アーカイブ エンジンを使用してログ情報を記録できます。 4. 参考文献 MySQL テクニカル インサイダー 上記はMySQLストレージエンジンの詳細についての簡単な紹介です。MySQLストレージエンジンの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します
>>: docker nginxコンテナの起動とローカルへのマウントの詳細な説明
スプライトカウダウンロード CSS リントダウンロード プレフィックスダウンロード 1140px C...
プログラムサービスがgitlab ci/cdと統合されたk8sを使用してデプロイされている場合、gi...
目次ステップ1: プロジェクトをインストールするディレクトリにnode_modulesをインストール...
yum で vsftpd をインストールします [root@localhost など]# yum -...
目次SSL証明書の作成1. 秘密鍵を生成する2. 証明書要求ファイルを生成する3. CRT証明書ファ...
データベースへの接続などの基本的な操作はご自身で行ってください。この記事ではパスワードの変更方法を中...
優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...
追加説明、外部キー: 外部キーを使用しないでください。すべての外部キーの概念はアプリケーション層で解...
この記事では、オンラインアナウンスのスクロール効果を実現するためのJSの具体的なコードを参考までに共...
最近、たまたま vue+springboot のフロントエンドとバックエンドの分離プロジェクトに触れ...
HTML ウェブ ページのハイパーリンク タグの学習チュートリアル リンク タグの属性 リンクは、ウ...
【質問】 HP サーバーを使用しています。SSD が IOPS 約 5000 を書き込むと、%uti...
ソフトウェア開発者は、ネットワーク アプリケーションがどのように動作するかを階層的に完全に理解してい...
目次1. はじめに2. 導入環境ツール4. 展開プロセス要約する1. はじめにNextcloud は...
FFMPEG 3.4.1 バージョンパラメータの詳細使用方法: ffmpeg [オプション] [[入...