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 のフィルターウィジェットの詳細な使用方法

推薦する

JSはGMTとUTCのタイムゾーンを完全に理解しています

目次序文1. GMT GMTとはGMTの歴史2. UTC UTCとはUTC は次の 2 つの部分で構...

MySQL で乱数を生成し、文字列を連結する方法の例

この記事では、MySQL が乱数を生成し、文字列を連結する方法について例を使用して説明します。ご参考...

js SMS認証コード入力ボックスを手動で実装する

序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

Vue ターンテーブル抽選の簡単な実装

この記事では、ホイール抽選を簡単に実装するためのVueの具体的なコードを参考までに共有します。具体的...

2015-2016年に主流となるインタラクティブ体験のトレンド

5月の最も重要なインタラクティブデザイン記事!今年、Baiduのデザイナーは体験の観点から出発し、大...

Linux スレッド間の同期と排他制御の知識ポイントのまとめ

スレッドが同時に実行される場合、スレッドがリソースを競合してデータの曖昧さが生じるのを防ぐために、重...

MySQL テーブルデータのインポートとエクスポートの例

この記事では、MySQL テーブル データのインポートおよびエクスポート操作について説明します。ご参...

CSSカウンター関連属性の学習の詳細な説明

CSS カウンター属性はほぼすべてのブラウザ (IE8 を含む) でサポートされていますが、あまり使...

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...

HTMLテーブルレイアウトの実践的な使い方の詳しい説明

テーブルはいつ使用されますか?最近では、Web ページの全体的なレイアウトにテーブルが使用されること...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

Centos7.X Linux システムに tomcat8 をインストールするためのグラフィック チュートリアル

1. Tomcatのインストールパスを作成する mkdir /usr/local/tomcat 2....