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コンテナの起動とローカルへのマウントの詳細な説明
目次1. ミューテックス1. ミューテックスの初期化2. ミューテックスロックの関連特性と分類3. ...
この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...
Web プロジェクトでは、タイムライン コントロールをよく使用します。この記事では、項目ごとに展開で...
目次1. pidファイルの紹介2.ソケットファイルの紹介要約:ソケット ファイル: Unix ドメイ...
目次Vueライフサイクルの紹介とフック機能VUEライフサイクルフックVue ライフサイクルの紹介作成...
序文:最近、インスタンスの移行の問題に遭遇しました。データの移行後、データベースのユーザーと権限も移...
MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...
この記事は主にインターネット上の他のチュートリアルを参考にしています。実際に操作した上でのまとめです...
Alibaba Cloud のカスタム Ubuntu イメージのインポートには、OSS スナップショ...
定義と使用方法:コンポーネントのテンプレートでスロットタグの定義を使用します。デフォルトの表示値は、...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
目次1. 変数意味のある名前を使う不必要なコンテキストを追加しないようにするハードコードされた値を避...
React で国際化を実現するにはどうすればよいでしょうか? react-intlプラグインは、Re...
目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...
この記事の例では、両端キューを実装するためのJavaScriptの具体的なコードを参考までに共有して...