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コンテナの起動とローカルへのマウントの詳細な説明
HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...
まずcharAt関数の基本的な構文を見てみましょう文字 = str.charAt(インデックス) c...
目次1. 共通機能分類1.1 単一行関数: 1.2 グループ化機能: 2. 単一行関数3. 数学関数...
JSON (JavaScript Object Notation、JS Object Notatio...
Linuxファイアウォールの状態を確認する方法1. 基本操作 # ファイアウォールのステータスを表示...
目次フロントエンドルーティングとは何ですか?フロントエンドルーティングを実装するにはどうすればいいで...
CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...
前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...
方法1: SET PASSWORDコマンドを使用する mysql -u ルート mysql> ...
目次シナリオ効果コード要約するシナリオ登録ページに携帯電話番号を入力し、登録インターフェイスを要求す...
不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...
JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...
序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...
Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....
エラーのスクリーンショット例外が発生した場所が見つかりません。解決策: リソースディレクトリにlog...