今回はMySQLの内部構造、アーキテクチャについて勉強した内容を紹介します。
MySQLの概要は以下の記事で紹介しておりますので、ご参考ください。
MySQLのアーキテクチャを構成する2つの層について
MySQLのアーキテクチャの概要図は以下の通りです。
サーバー層、ストレージエンジン層という主に2つの層から構成されています。
各層の詳細は以下の通りです。
サーバー層
サーバ層は、接続の受付、ユーザー認証、権限管理、SQLの構文解析と最適化などの処理が行われます。
- Connector: クライアントとの接続を管理し、認証を行います。
- Parser: SQLクエリを解析し、構文木を生成します。この段階で文法エラーが検出されます。
- Optimizer: クエリ実行の最適な計画を立てます。インデックスの選択、JOINの順序決定などを行います。
- Executor: 実際にクエリを実行し、ストレージエンジンとやり取りしてデータを取得または更新します。
- キャッシュ&バッファ:
- クエリキャッシュ(MySQL 8.0以降では非推奨)
- テーブルメタデータキャッシュ
- キーキャッシュ
ストレージエンジン層
ストレージエンジン層は実際のデータの保存と取得を担当します。
主な機能は以下の通りです。
- トランザクション管理
- データフォーマットの定義とデータの永続化
- インデックス管理
最も一般的に使用されるストレージエンジンはInnoDBです。
ストレージエンジンは異なる特性を持ち、用途に応じて選択します。
ストレージエンジンの種類
MySQLには複数のストレージエンジンがあり、それぞれ異なる特徴と用途があります。
主要なストレージエンジンとその概要は以下の通りです。
- InnoDB
- MySQL 5.5以降のデフォルトエンジン
- トランザクション対応(ACID準拠)
- 行レベルロッキングをサポート
- 外部キー制約をサポート
- クラッシュリカバリ機能あり
- MyISAM
- 以前のバージョンでのデフォルトエンジン
- 非トランザクショナル
- テーブルレベルロッキング
- フルテキスト検索インデックスをサポート
- 読み取り操作に最適化
- MEMORY
- データをRAMに保存し、高速アクセスを提供
- 非永続的(サーバー再起動時にデータが失われる)
- 一時テーブルや高速ルックアップに適している
- CSV
- データをCSVファイルとして保存
- テーブルの内容を簡単にエクスポート/インポート可能
- ARCHIVE
- 大量の未加工データを非常に小さなフットプリントで保存
- 主に保管とレポート生成に使用
- FEDERATED
- リモートMySQLサーバーのテーブルにアクセス可能
- データは実際にはリモートサーバーに保存される
- MERGE
- 複数の同一構造のMyISAMテーブルを1つの論理テーブルとして扱える
これらのストレージエンジンは、それぞれ異なるユースケースに適しています。
アプリケーションの要件に応じて適切なエンジンを選択することが重要です。
この2層構造により、MySQLは柔軟性と拡張性を実現しています。
サーバー層がクエリ処理を担当し、ストレージエンジン層が実際のデータ管理を行うことで、異なるストレージ要件に対応できる設計となっています。
その他の重要な構成要素
- ログシステム:
- MVCC (Multi-Version Concurrency Control):
トランザクションの分離レベルを実現するために使用される仕組みです。InnoDBでは各レコードに3つの隠しカラム(DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR)を追加して実装しています。
MySQLのアーキテクチャはこれらのコンポーネントが連携して動作することで、高速で信頼性の高いデータベース管理システムを実現しています。
まとめ
今回はMySQLの内部構造、アーキテクチャについて紹介しました。
ご参考になれば幸いです。
以上になります。ありがとうございました。
参考
https://zenn.dev/shimakaze_soft/scraps/21f43d4db78f0c
https://sg.wantedly.com/companies/progrit/post_articles/326087
https://kinsta.com/jp/knowledgebase/what-is-mysql/
https://www.geeksforgeeks.org/architecture-of-mysql/
https://qxf2.com/blog/mysql-architecture-and-layers/
https://www.cogentinfo.com/resources/architecture-of-mysql
https://dev.mysql.com/doc/refman/8.4/en/storage-engines.html
コメント