MySQLの論理アーキテクチャに関する深い理解

MySQLの論理アーキテクチャに関する深い理解

MySQL は現在、ほとんどの企業や事業体で使用されているデータベースです。MySQL が使用される理由は、MySQL がオープンソース ソフトウェアであるためです。有能な企業の中には、既存の MySQL アーキテクチャを自社のビジネス ニーズに合わせて変更、調整するところもあります。

理由の 1 つは、MySQL は無料であるのに対し、Oracle サービスは比較的高価であることです。多くのスタートアップ企業にとって、MySQL は最も適したデータベースです。

MySQL の論理アーキテクチャを理解する必要がある理由は、自分たちで開発を行うときと同じように、まずは自分のシステムで使用されている階層化アーキテクチャを習得して、開発プロセス中にリンクに問題が発生した場合にトラブルシューティングが容易になるようにするためです。 MySQL の論理アーキテクチャを理解する場合も同様です。MySQL を使用する場合、問題がいつ発生するかはわかりませんが、問題が発生したときに (クエリ SQL の最適化、どこから始めるかなど)、問題をより明確に特定できます。

1.接続

Mysqlサーバーに接続するために、Mysqlサービスにクライアントとして接続します。Mysqlはさまざまなプログラミング言語プラットフォームに接続できます。

2. 管理サービスとユーティリティ

バックアップ、復元、レプリケーション、クラスタリングなどの MySQL サービスの管理および制御ツールとして。

3. 接続プール

接続プールの主な機能は、接続認証、スレッドの再利用、接続数の制限などを提供することです。

4.SQLインターフェース

ここでは主に、Mysql DML、DDL ステートメント、およびストアド プロシージャ、ビュー、トリガーなどを受け取ります。

5. 解析する

ここで重要なのは、渡されたSQL文字列を解析することです。たとえば、私たちが初めて触れたJDBCプログラミングでは、文字列型のSQL文をMySQLに送信し、パーサーはまずSQL文に対して字句解析を実行して構文ツリーを形成し、次に構文ツリーに対して文法解析を実行して各単語セグメントがSQL92標準を満たしているかどうかを確認します。満たしている場合は、次の業務処理リンクを実行します。

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

クエリ オプティマイザーは、渡された SQL ステートメントを分析して、主に次の 3 つの側面に焦点を当てて、それが最適な実行ステートメントであるかどうかを判断します。
* どのインデックスを使用するか(テーブルには複数のインデックスがあり、最もフィルタリング能力の強いインデックスを選択します)
* 複数テーブル関連付けのテーブル接続順序
* WHERE条件の順序(MYSQLの左端プレフィックスの原則に従って、条件の順序は並べ替えられます)

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

MYSQL は各 SQL 文をハッシュし、そのハッシュ値をマップに格納します。SQL 文が来るたびに、まず SQL 文のハッシュ値が計算され、同じかどうかが確認されます。同じであれば、新しい SQL 文を解析して最適化しなくても、メモリ内の SQL 文を実行できるため、実行効率が向上します。

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

MSQL ストレージ エンジンはプラグ可能な機能をサポートしており、ユーザーは使用したいストレージ エンジンを自由に置き換えたり、独自のストレージ エンジンをカスタマイズしたりできます。ここでは、主に INNODB ストレージ エンジンと MYISAM ストレージ エンジンを分析および比較します。

通常、ストレージ エンジンを選択する場合は、主にビジネス ニーズに基づいて選択する必要があり、それぞれの特性を参照できます。

ストレージ エンジンの選択:

InnoDB:

トランザクション処理、外部キー、クラッシュ回復機能、同時実行制御をサポートします。トランザクションの整合性に対する要件が厳しい場合 (銀行など) や同時実行制御が必要な場合 (チケット販売など) は、InnoDB を選択すると大きなメリットがあります。頻繁に更新や削除操作を行うデータベースが必要な場合は、トランザクションのコミットとロールバックをサポートしている InnoDB を選択することもできます。

マイISAM:

データの挿入は高速で、スペースとメモリの使用量も比較的少なくなります。テーブルが主に新しいレコードの挿入とレコードの読み取りに使用される場合は、MyISAM を選択すると高い処理効率を実現できます。アプリケーションの整合性と同時実行性の要件が比較的低い場合は、これを使用することもできます。

メモリ:

すべてのデータはメモリ内に保存されており、データ処理速度は高速ですが、セキュリティは高くありません。高速な読み取りおよび書き込み速度が必要で、データ セキュリティの要件が低く、永続的なストレージを必要としない場合は、MEMOEY を選択できます。テーブルのサイズには要件があり、大きすぎるテーブルを作成することはできません。したがって、このタイプのデータベースは、比較的小さなデータベース テーブルでのみ使用されます。

これは、MYSQL の簡単な実行フローチャートです。このチャートにより、MYSQL の全体的な実行プロセスを明確に理解できます。

これで、MYSQL の論理アーキテクチャの紹介は終わりです。もちろん、MYSQL にも対応する物理アーキテクチャがありますが、この部分は主に MYSQL のさまざまなログ ファイルと、各テーブルのデータ ファイルとインデックス ファイルに関係しており、これらについては次の章で紹介します。

上記は、MySQL 論理アーキテクチャの詳細な理解に関する内容です。MySQL 論理アーキテクチャの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLデュアルマスター(マスターマスター)アーキテクチャ構成ソリューション
  • MySQL の全体的なアーキテクチャの紹介
  • MySQL 20 の高性能アーキテクチャ設計原則 (収集する価値あり)
  • MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQL アーキテクチャのナレッジポイントの概要
  • Mysql論理アーキテクチャの詳細な説明
  • MySQL データベース アーキテクチャの詳細

<<:  Docker イメージのローカル Elasticsearch ポート操作へのアクセス

>>:  Reactはグローバル箇条書きボックスメソッドをカプセル化します

推薦する

Webpack3+React16コード分割の実装

プロジェクトの背景最近、webpackのバージョンが古いプロジェクトがあります。 リーダー層では今の...

Linux ファイアウォール設定の詳細な手順 (yum ウェアハウス設定に基づく)

序文この実験では、デバッグ用に2つの仮想マシン(CentOs6とRed Hat 6)を準備します。 ...

登録ページを実装するためのJS、CSS、HTML

HTML と CSS で実装された登録ページ テンプレート。早速、コードを見てみましょう。更新: ...

JavaScript でプロトタイプ パターンを実装する方法

概要プロトタイプ パターンは、プロトタイプ インスタンスによって作成されるオブジェクトの型を指し、こ...

Linux での mysql および mysql.sock のインストールに関する問題

最近、Linux に Aphace、mysql、php をインストールするときに多くの問題に遭遇しま...

Raspberry PiにDockerをインストールする方法

Raspberry Pi は ARM アーキテクチャをベースとしているため、Docker のインスト...

ウェブ開発で遭遇した問題と経験

<br />以下は開発中に遭遇した問題と、そこから得た経験です。デバッグに時間がかかりま...

JSON.stringify のさまざまな用途のまとめ

序文json を使用したことがある人なら、オブジェクトを文字列化してからバックエンドに送信するのが一...

XHTML+CSS Web ページ作成における美しいスタイルシートの適用

これはかなり前に書かれた記事です。今となっては、その中の考え方は学ぶ価値があるように思えます。jb5...

広告を閉じるための JavaScript カウントダウン

広告を閉じるまでのカウントダウンを実装するために JavaScript を使用するまだフロントエンド...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

MySQL 8.0 でリモートアクセス権限を設定する方法

前回の記事では、MySQL パスワードをリセットする方法を説明しました。一部の学生から、データベース...

Vue Element UIの使用時に遭遇した問題をまとめる

目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...

Vueは移動可能なフローティングボタンを実装します

この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...