MySQL の論理アーキテクチャについて話しましょう

WBOY
リリース: 2022-03-15 17:36:26
転載
2027 人が閲覧しました

この記事は、mysql に関する関連知識を提供します, 主に mysql 論理アーキテクチャの関連問題を紹介します. 一般的なアーキテクチャは 3 つの層に分かれており, 接続スレッドの処理に使用されます, mysql のほとんどが含まれていますコアサービスとストレージエンジンについて、皆様のお役に立てれば幸いです。

MySQL の論理アーキテクチャについて話しましょう

#推奨学習:

mysql 学習チュートリアル

Mysql の論理アーキテクチャ (大きく 3 つの層に分かれています)

最初に層: 接続スレッド処理

  • クライアント——>接続スレッド処理 (接続処理、認可認証、セキュリティ)

含まれるサービスは mysql に固有のものではありません。それらはすべて C/S プログラム、またはこれらのプログラムが必要とするもの (接続処理、認可認証、セキュリティなど) を提供します。

第 2 層: mysql コア サービスのほとんどが含まれています

    ##クエリ キャッシュ—>パーサー—>オプティマイザー—>クエリの実行
クエリのキャッシュ、解析、分析、最適化、キャッシュ、すべての組み込み関数 (日付、時刻、数学関数、暗号化関数) と同時に、ストレージ エンジンによって提供されるすべての関数がこの層 (ストレージ プロセス、トリガー、ビュー) に集中しています。
プロセス: クエリを解析する前に、まずキャッシュにクエリを実行する必要があります。キャッシュはクエリ情報と結果データのみを保存できます。クエリが要求されてキャッシュに存在する場合、解析は必要ありません。クエリは最適化されており、実行され、キャッシュに保存されたクエリの結果が直接返されます。

3 番目の層: ストレージ エンジンが含まれます

ストレージ エンジンが担当しますmysql の場合 データの保存と取得 (Linux のファイル システムに似ています)
  • 各ストレージ エンジンには長所と短所があり、中間サービス層は API を介してストレージ エンジンと通信します。 、これらの API インターフェイスは、さまざまなストレージ エンジン間の違いを保護し、クエリ レイヤーを可能な限り透過的にします。
ストレージ エンジン API には、「トランザクションの開始」の実行や特定の主キーを持つ行のフェッチなど、十数個の低レベル関数が含まれていますが、ストレージ エンジンは通常、SQL を解析しません (InnoDB は外部データを解析します)。キー定義 、この機能自体は実装されていないため)、異なるストレージ エンジンは相互に通信せず、単に上位層のサーバー リクエストに応答します。

Mysql 論理アーキテクチャ - 詳細な紹介 (8 つのステップに分かれています)

1.Connectors

さまざまな予言を参照します SQL との対話
  • Nactive C API、JDBC、ODBC、.NET、PHP、Python、Perl、Ruby、VB

2. エンタープライズ管理サービスとユーティリティ

#システム管理および制御ツール

  • ##バックアップとリカバリ、セキュリティ、レプリケーション、クラスタ、パーティショニング、インスタンス マネージャ、INPORMATICN_SCHEMA、管理者、ワークベンチ、クエリ ブラウザ、移行ツールキット

3. 接続プール

バッファされたユーザー接続、スレッド処理などを管理します。キャッシュ要件が必要です。

  • MySQL サーバーへのさまざまなリクエストを監視し、接続リクエストを受け入れ、すべての接続リクエストをスレッド管理モジュールに転送する責任を負います。
  • MySQL Server に接続されているすべてのクライアント リクエストには、個別に処理するための接続スレッドが割り当て (作成) され、接続スレッドはキャッシュされるため、クライアント接続を作成する必要はありません。接続スレッドの主な仕事は、MySQL サーバーとクライアントの間の通信を担当し、クライアントのコマンド要求を受信し、サーバーから結果情報を送信することです。スレッドの作成を含むこれらの接続スレッドの維持スレッド キャッシュなど

  • #認証 - スレッドの再利用 - 接続制限 - メモリの確認 - キャッシュ

  • 4.SQL インターフェイス (SQL インターフェイス)

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

  • DML、DDL、ストアド プロシージャ、ビュー、トリガーなど

  • 5.Parser (パーサー)

SQL コマンドがパーサーに渡されると、検証と解析が行われます。パーサーは Lex と YACC によって実装されており、非常に長いスクリプトです。MySQL では、クライアントから送信されたすべてのコマンドを呼び出して、サーバー側はクエリと呼ばれます。MySQL サーバーでは、接続スレッドがクライアントを受け取ります。最後にクエリを受信した後、クエリは、さまざまなクエリを分類し、対応する各処理モジュールに転送するモジュールに直接渡されます。
############主な機能:##### #
  • a. SQL ステートメントの意味分析と構文分析を実行し、それらをデータ構造に分解し、同じ操作タイプに従って分類し、後続のステップへのターゲットを絞った転送を行います。

  • #b. 分解中にエラーが発生した場合は、SQL ステートメントに無理があることを意味します

クエリ変換、オブジェクト権限

6.オプティマイザー (クエリ オプティマイザー)

SQL ステートメントは、クエリを実行する前にクエリ オプティマイザーを使用してクエリを最適化します。クライアントがクエリを要求する クライアントが要求したクエリ文とデータベース内のいくつかの統計情報に基づいて、一連のアルゴリズムに基づいて分析され、最適な戦略が得られ、後続のプログラムにどのように実行するかを指示します。クエリ ステートメントの結果を取得します。クエリには「Select-Projection-Join」戦略を使用します。
例: select uid,name from user where virgin=1;
このクエリステートメントは、まず where の後のステートメントに基づいて選択します。最初にすべてのテーブルをクエリしてから性別フィルタリングを実行し、次にすべての属性を取り出してフィルタリングするのではなく、uid と名前に基づいて属性投影を実行し、最後にこれら 2 つを接続します。最終的なクエリ結果を生成するためのクエリ条件

アクセス パス、統計

7.キャッシュとバッファ (クエリ キャッシュ)

主な機能は次のとおりです。クライアントを MySQL のクラス選択クエリに送信する リクエストによって返された結果セットはメモリにキャッシュされ、クエリのハッシュ値に対応します クエリによって取得されたデータのベース テーブルでデータ変更が発生した後、MySQL はクエリのキャッシュを自動的に無効化します。読み取りと書き込みの比率が非常に高いアプリケーション システムでは、クエリ キャッシュによりパフォーマンスが大幅に向上しますが、当然のことながら大量のメモリを消費します。
クエリ キャッシュに有効なヒット クエリ結果がある場合、クエリ ステートメントはクエリ キャッシュからデータを直接フェッチできます。このキャッシュ メカニズムは、テーブル キャッシュ、レコード キャッシュなどの一連の小さなキャッシュで構成されます。 、キー キャッシュ、権限キャッシュなど

グローバルおよびエンジン固有のキャッシュとバッファ

8.プラグイン可能なストレージ エンジン

  • ストレージ エンジン インターフェイス: MySQL を他のデータベースと区別する最も重要な機能は、プラグイン テーブル ストレージ エンジンです。

  • MySQL プラグイン ストレージ エンジン アーキテクチャは、一連の標準的な管理およびサービス サポートを提供します。これらの標準はストレージ エンジン自体とは何の関係もなく、すべてのデータベース システムで必要になる可能性があります。 SQL アナライザーやオプティマイザーなどとして機能し、ストレージ エンジンは基礎となる物理構造の実装です。各ストレージ エンジン開発者は、自分の希望に応じて開発できます。

9.ファイル システム

  • ファイル システム、データ、ログ (やり直し、元に戻す) インデックス、エラー ログ、クエリ レコード、スロー クエリ、

注: ストレージ エンジンはデータベースではなくテーブルに基づいています

データベース ワークフロー

確立TCP 接続—> ユーザーの確認—> SQL を解析するスレッドの作成—> 実行プランの生成—> テーブルを開く—> バッファを検索して必要なデータ ページがキャッシュされているかどうかを確認—> ディスク データからスキャン— >データを取得してバッファ プールに書き込む——>データをクライアントに返す——>テーブルを閉じる——>スレッドを閉じる——>接続を閉じる

    #最上位層: クライアント接続
1. 接続処理: クライアントはデータベース サービス層との TCP 接続を確立します。接続管理モジュールは接続を確立し、接続スレッドを要求します。接続プールにアイドル状態の接続スレッドがある場合は、この接続に割り当てられます。そうでない場合は、スレッド接続の最大数を超えることなく、このクライアントを担当する新しい接続スレッドが作成されます。

2. 認可認証: クエリ操作の前に、ユーザー モジュールを呼び出して認可チェックを実行し、ユーザーに権限があるかどうかを確認する必要があります。認可に合格すると、サービスが提供され、接続スレッドが受け入れを開始します。クライアントからの SQL ステートメントを処理します

    第 2 層: コア サービス
#1. 接続スレッドがSQL ステートメントを作成すると、そのステートメントを SQL ステートメント解析モジュールに渡し、構文とセマンティクスを分析します。

2. クエリ ステートメントの場合は、まずクエリ キャッシュに結果があるかどうかを確認し、結果があればクライアントに直接返します。

3. クエリ キャッシュに結果がない場合は、データベース エンジン層にクエリを実行し、SQL ステートメントをオプティマイザに送信してクエリを最適化する必要があります。テーブル変更の場合は、分類が渡されます。挿入、更新、削除に進み、処理用の作成、アラート処理モジュール

    第 3 層: データベース エンジン層
1. 必要に応じて対応するロックを取得する場合は、テーブルを開きます。

2. まずキャッシュページに該当するデータがあるか確認し、あればそのまま返却、なければディスクから読み込みます。データがディスク上で見つかった後、データはキャッシュにロードされ、後続のクエリがより効率的になります。キャッシュが限られているため、キャッシュされたデータが頻繁にアクセスされるように、柔軟な LRU テーブルを使用してキャッシュ ページを管理することがよくあります。

4. 最後に、データを取得したら、それをクライアントに返し、接続を閉じ、接続スレッドを解放します。

FAQ 分析

1. プラグイン ストレージ エンジンとは何ですか

ストレージ エンジンは、ディスクへのデータの読み取りと書き込みを行います。ストレージエンジン、読み取りと書き込みの操作方法も異なり、トランザクション、ロックなどが異なります。ビジネスニーズが異なるため、多くのストレージエンジンが存在します。データベースでは、ストレージエンジンはテーブルに基づいているため、さまざまですテーブルにはさまざまなストレージ エンジンを含めることができます。これにより、実行中の MySQL サーバーにストレージ エンジンをロードできます。これは、プラグイン ストレージ エンジンです。

#2. LRU キャッシュとは

キャッシュ削除メカニズムの戦略アルゴリズム, キャッシュ メモリは常に限られているため, 新しいコンテンツのためのスペースを作るためにキャッシュがいっぱいになったときに一部のコンテンツを削除する必要があります. LRU メカニズムでは, 削除されたデータは無駄なデータと呼ばれます. の正式名LRU は最も最近使用されていないデータ、つまり最近使用されたデータは有用であり、長期間使用されていないデータは役に立たないと考えられます。長期間使用されるものは最初に削除されます

  • JVM の Ehcache のキャッシュ戦略には

  1. # が含まれますLRU - 最も最近使用されていない (最も最近使用されていない)

  2. LFU - 最も頻繁に使用されていない (最も頻繁に使用されていない)

  3. FIFO - 先入れ先出し、作成時間による最も古い要素 (キャッシュされた最も古いデータをクリアします。頻繁に使用する場合は気にしないでください)

推奨される学習:

mysql チュートリアル #

以上がMySQL の論理アーキテクチャについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!