MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明

MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明

MySQL 論理アーキテクチャの概要

他のデータベースと比較すると、MySQL は、そのアーキテクチャがさまざまなシナリオに適用でき、適切に機能するという点で少し異なります。これは主にストレージ エンジン アーキテクチャに反映されています。プラグイン ストレージ エンジン アーキテクチャは、クエリ処理を他のシステム タスクやデータの保存と抽出から分離します。 このアーキテクチャにより、ビジネス ニーズと実際の要件に基づいて適切なストレージ エンジンを選択できます。

コントローラー層:
コネクタ: 接続層、C、Java など。MySQL に接続します。

ビジネス ロジックは次のように処理されます。
接続プール: 接続層の c3p0 接続プールなど。
マネージャー サービス ユーティリティ: バックアップ、ディザスタ リカバリ、クラスターなど。
SQL インターフェース: ストアド プロシージャ、ビュー トリガー
パーサー: 物やオブジェクトの権限のクエリが select で始まる場合は読み取り操作と見なされ、insert で始まる場合は書き込み操作と見なされます。
SQL文の読み込みはから始まり、mysqlが理解できる形式に変換されます。
オプティマイザー: MySQL オプティマイザー。前回の変換後、MySQL は、人為的な最適化ではなく、MySQL が考慮する最善の方法に最適化します。
キャッシュとバッファ

プラグ可能なストレージエンジン
プラグインストレージエンジン
彼らのほとんどはMyismとInnoDBを使用しています

ファイルストレージ層のコンピュータハードウェア
ファイルシステム
ファイルとログ

1. 接続層

最上位層は、ローカル ソック通信や、同様の TCP/IP 通信を実現するためのクライアント/サーバー ベースのツールのほとんどを含む、多数のクライアントと接続サービスです。主に、接続処理、認可認証、関連するセキュリティ ソリューションなどのタスクを実行します。このレイヤーでは、認証を通じて安全にアクセスしたクライアントにスレッドを提供するために、スレッド プールの概念が導入されています。 SSL ベースの安全なリンクもこの層で実装できます。サーバーは、安全にアクセスする各クライアントの操作権限も検証します。

2. サービス層

2.1 管理サービスとユーティリティ: システム管理および制御ツール

2.2 SQL インターフェイス: SQL インターフェイスは、ユーザーの SQL コマンドを受け入れ、ユーザーがクエリする必要のある結果を返します。たとえば、select fromはSQLインターフェースを呼び出します

2.3 パーサー: パーサー
SQL コマンドがパーサーに渡されると、パーサーによって検証および解析されます。

2.4 オプティマイザー: クエリ オプティマイザー。
SQL ステートメントは、クエリを実行する前にクエリ オプティマイザーを使用して最適化されます。
これは次の例で理解できます: select uid,name from user where gender= 1;
オプティマイザーは、最初に投影するかフィルタリングするかを決定します。

2.5 キャッシュとバッファ: クエリ キャッシュ。
クエリ キャッシュにヒットしたクエリ結果がある場合、クエリ ステートメントはクエリ キャッシュからデータを直接取得できます。
このキャッシュ メカニズムは、一連の小さなキャッシュで構成されています。たとえば、テーブル キャッシュ、レコード キャッシュ、キー キャッシュ、権限キャッシュなどのキャッシュは読み取りを担当し、バッファは書き込みを担当します。

3. エンジン層

ストレージ エンジン レイヤー: ストレージ エンジンは、MySQL でのデータの保存と抽出を実際に担当します。サーバーは API を介してストレージ エンジンと通信します。ストレージ エンジンによって機能が異なるため、実際のニーズに応じて選択できます。 MyISAMとInnoDBは後ほど導入される予定

4. ストレージ層

データ ストレージ層は主に、raw デバイス上で実行されているファイル システムにデータを保存し、ストレージ エンジンとのやり取りを完了します。

概要

クエリフローチャート:

まず、MySQL のクエリプロセスはおおよそ次のようになります。
•MySQL クライアントはプロトコルを介して MySQL サーバーとの接続を確立し、クエリ ステートメントを送信して、まずクエリ キャッシュをチェックします。ヒットした場合 (まったく同じ SQL のみがヒットします)、結果を直接返し、それ以外の場合はステートメントを解析します。つまり、クエリを解析する前に、サーバーはまずクエリ キャッシュ (クエリ キャッシュ) にアクセスします。クエリ キャッシュには、SELECT ステートメントと対応するクエリ結果セットが格納されます。クエリ結果がすでにキャッシュ内にある場合、サーバーはクエリを解析、最適化、または再度実行しません。キャッシュ内の結果をユーザーに返すだけなので、システムのパフォーマンスが大幅に向上します。

構文パーサーと前処理: まず、MySQL はキーワードを通じて SQL ステートメントを解析し、対応する「解析ツリー」を生成します。 MySQL パーサーは、MySQL 構文規則を使用してクエリを検証および解析します。さらに、プリプロセッサは、解析された数値がいくつかの MySQL 規則に従って有効であるかどうかを確認します。
クエリ オプティマイザー 解析ツリーが有効であると判断されると、オプティマイザーによって実行プランに変換されます。クエリはさまざまな方法で実行でき、同じ結果が返されます。オプティマイザの役割は、それらの中から最適な実行プランを見つけることです。 。
次に、MySQL はデフォルトで BTREE インデックスを使用します。一般的な方向性としては、SQL をどのように変更しても、少なくとも現時点では、MySQL はテーブル内で最大 1 つのインデックスのみを使用します。

MySQL ストレージ エンジン

コマンドの表示

1 コマンドで表示する方法

MySQL が現在提供しているストレージ エンジンを確認します。

mysql> エンジンを表示します。


InnoDB のデフォルト。トランザクション、外部キー、行ロックをサポート

MySQL の現在のデフォルトのストレージ エンジンを確認します。

mysql> '%storage_engine%' のような変数を表示します。


デフォルトはInnoDBです
現在のものもInnoDBです

各エンジンの紹介

1. InnoDB ストレージエンジン

InnoDB は、多数の短命トランザクションを処理するように設計された MySQL のデフォルトのトランザクション エンジンです。別のストレージ エンジンを使用する特別な理由がない限り、InnoDB エンジンを優先する必要があります。 行レベルのロックは、同時実行性の高い状況に適しています。

2. MyISAM ストレージエンジン

MyISAM は、全文インデックス、圧縮、空間関数 (GIS) など、多数の機能を提供しますが、トランザクションと行レベルのロックはサポートしていません (MyISAM はテーブルを変更するときにテーブル全体をロックします)。 1 つの明らかな欠点は、クラッシュ後に安全に回復できないことです。

3. アーカイブエンジン

アーカイブ ストレージ エンジンは INSERT および SELECT 操作のみをサポートし、MySQL 5.1 より前のインデックスはサポートしません。
アーカイブ テーブルは、ログおよびデータ収集アプリケーションに適しています。 アクセスが少ないビッグデータなどの状況に適しています。
英語のテスト結果によると、アーカイブ テーブルは MyISAM テーブルよりも約 75% 小さく、トランザクション処理をサポートする InnoDB テーブルよりも約 83% 小さくなります。

4. ブラックホールエンジン

Blackhole エンジンはストレージ メカニズムを実装していません。挿入されたデータはすべて破棄され、データは保存されません。ただし、サーバーは Blackhole テーブルのログを記録するため、これを使用してデータをバックアップ データベースにコピーしたり、単にログに記録したりすることができます。ただし、この適用方法では多くの問題が発生するため、お勧めできません。

5. CSVエンジン

CSV エンジンは通常の CSV ファイルを MySQL テーブルとして処理できますが、インデックスはサポートしていません。
CSV エンジンは、データ交換メカニズムとして非常に便利です。
CSV に保存されたデータは、テキスト エディターまたは Excel を使用してオペレーティング システムで直接読み取ることができます。

6. メモリエンジン

データにすばやくアクセスする必要があり、再起動後もデータが変更されたり失われたりしない場合は、メモリ テーブルを使用すると非常に便利です。メモリ テーブルは、MyISAM テーブルよりも少なくとも 1 桁高速です。 (Redisなどの専門的なメモリデータベースを使用する方が高速です)

7. フェデレーテッドエンジン

Federated エンジンは、他の MySQL サーバーにアクセスするためのプロキシです。このエンジンはサーバー間で優れた柔軟性を提供するように見えますが、問題が発生することもよくあるため、デフォルトでは無効になっています。

MyISAM と InnoDB (要点)

比較項目マイISAM翻訳
主キーと外部キーサポートされていませんサポート
取引サポートされていませんサポート
行テーブルロックテーブルロック: 1 つのレコードを操作する場合でもテーブル全体がロックされるため、同時実行性の高い操作には適していません。行ロック: 操作中に他の行に影響を与えずに 1 行のみをロックします。高同時実行に適しています。
キャッシュ実際のデータではなく、インデックスのみをキャッシュしますインデックスだけでなく実際のデータもキャッシュする必要があるため、大量のメモリが必要となり、メモリ サイズがパフォーマンスに決定的な影響を与えます。
表領域小さい大きい
集中パフォーマンス取引
デフォルトのインストールはいはい
デフォルトのインストールはいはい
デフォルトのインストールはいはい
ユーザーテーブルはデフォルトを使用しますいいえはい
組み込みシステムテーブルの使用はいいいえ

InnoDB インデックスは B+TREE を使用し、MyISAM インデックスは B-tree を使用します。
InnoDB の主キーはクラスター化インデックスであり、クラスター化インデックスに基づく追加、削除、変更、クエリの効率は非常に高くなります。

Alibaba と Taobao ではどちらを使用すればよいですか?


• Percona は MySQL データベース サーバーを改良し、MySQL に比べて機能とパフォーマンスが大幅に向上しました。このバージョンでは、高負荷状態での InnoDB のパフォーマンスが向上し、DBA にとって非常に便利なパフォーマンス診断ツールがいくつか提供され、サーバーの動作を制御するためのパラメーターとコマンドが増えています。

•同社は、InnoDBを完全に置き換えることができ、より優れたパフォーマンスと同時実行性を備えたXtraDBという新しいストレージエンジンを開発しました。

•Alibaba の MySQL データベースのほとんどは、実際には Percona プロトタイプから変更されています。
• AliSql+AliRedis

以上は、編集者が紹介したMySQL論理アーキテクチャとMySQLストレージエンジンの詳細な統合の紹介です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明
  • MySQLメモリストレージエンジンに関する知識
  • MySQLのストレージエンジンの詳細な説明
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySql ストレージ エンジンとインデックスに関する知識のまとめ
  • MySQL MyISAM デフォルト ストレージ エンジンの実装原則
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQLでよく使われる4つのストレージエンジンについて簡単に説明します。
  • MySQL ストレージエンジン InnoDB の設定と使用方法の説明
  • MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要
  • 一般的なMySQLストレージエンジンの長所と短所

<<:  Vue ローカルコンポーネントデータ共有 Vue.observable() の使用

>>:  Vue のフィルターウィジェットの詳細な使用方法

推薦する

HTML Web ページ リスト タグ学習チュートリアル

HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...

Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点

質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...

Javascriptの基本ループの詳しい説明

目次サイクルのために入室のためのその間しながら行うループから抜け出す要約するサイクルのためにループは...

Linux で iostat コマンドを使用するチュートリアル

序文運用・保守を行う人がスキルを持っていなければ、サーバーを操作するのに恥ずかしさを感じてしまうと言...

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...

標準的なHTMLの書き方は、Dreamweaverによって自動的に生成されるものとは異なります。

コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...

CocosCreator 学習モジュールスクリプト

Cocos Creator モジュラースクリプトCocos Creator を使用すると、コードを複...

Firefox で Webdings フォントをサポートする方法

Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...

Centos7 環境でソースコードから mysql5.7.16 をインストールする方法の詳細な説明

この記事では、centos7 環境でソース コードから mysql5.7.16 をインストールする方...

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

素晴らしい CSS ナビゲーション バーの下線効果

中国初のカッター github.com/chokcocoまず、ここに画像があります。純粋な CSS ...

ラベルタグの使用時に発生する問題の分析と解決策

最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...

中国語と英語のフォント名の比較表(FounderとArphicを含む)

CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...