ストレージエンジン
MySQL アーキテクチャ
- 接続層
最上位層は、ローカル Sock 通信や、クライアント/サーバー ツールに基づく TCP/IP に似たほとんどの通信を含む、いくつかのクライアント サービスと接続サービスです。
主に、同様の接続処理、認可認証、および関連するセキュリティ ソリューションをいくつか完了します。この層では、認証と安全なアクセスを通過するクライアントにスレッドを提供するために、スレッド プールの概念が導入されています。SSL ベースの安全なリンクもこの層に実装できます。また、サーバーは、サーバーに安全にアクセスする各クライアントに対してそのサーバーが持つ操作権限を検証します。 - サービス層
第 2 層アーキテクチャは主に、SQL インターフェイスなどのほとんどのコア サービス機能
を完了し、キャッシュされたクエリ、SQL 分析と最適化、およびいくつかの組み込み関数の実行を完了します。すべてのクロスストレージ エンジン機能もこの層、プロシージャ、関数などで実装されます。この層では、サーバーは
クエリを解析して対応する内部解析ツリーを作成し、テーブル クエリの順序やインデックスを使用するかどうかなどを決定するなど、それに応じて最適化して、最終的に対応する実行操作を生成します
。select ステートメントの場合、サーバーは内部キャッシュにもクエリを実行します。キャッシュ領域が十分に大きければ、
大量の読み取り操作を解決する環境でシステムのパフォーマンスを大幅に向上させることができます。 - エンジン層
ストレージ エンジン層。ストレージ エンジンは実際に MySQL でのデータの保存と取得を担当し、サーバーは API を介してストレージ エンジンと通信します
。ストレージエンジンが異なれば機能も異なるため、ニーズに応じて適切なストレージエンジンを選択できます。データベース
のインデックスはストレージ エンジン層で実装されます。 - ストレージ層
データ ストレージ層は主にデータ (redolog、undolog、データ、インデックス、バイナリ ログ、エラー ログ、クエリ ログ、スロー クエリ ログなど) をファイル システムに保存し、ストレージ エンジンとの対話を完了します
。
他のデータベースと比較すると、MySQL はそのアーキテクチャがさまざまなシナリオに適用でき、適切に機能するという点で少し異なります。これは主に
ストレージ エンジンに反映されており、プラグイン ストレージ エンジン アーキテクチャにより、クエリ処理が他のシステム タスクやデータの保存と抽出から分離されます。
このアーキテクチャでは、ビジネス ニーズと実際のニーズに応じて適切なストレージ エンジンを選択できます。
ストレージエンジン
ストレージ エンジンの概要
ストレージ エンジンは mysql データベースの中核であり、適切なシナリオで適切なストレージ エンジンを選択する必要があります。
ストレージ エンジンは、データの保存、インデックスの構築、データの更新/クエリなどのテクノロジの実装です。
ストレージ エンジンはライブラリではなくテーブルに基づいているため、ストレージ エンジンはテーブル タイプとも呼ばれます。
テーブルの作成時に選択するストレージ エンジンを指定できます。指定しない場合は、デフォルトのストレージ エンジンが自動的に選択されます。
テーブル作成ステートメントを通じて、次の情報を確認できます。
ENGINE はエンジンです。これはデフォルトの InnoDB です (AUTO_INCREMENT=6 は、次のデータが挿入されるときに自動拡張属性を持つ ID が 6 になることを意味します、CHARSET は文字セットの文字エンコーディング、COLLATE はソート方法です) )。
文法
現在のデータベースでサポートされているストレージ エンジンを表示します
show engines;
その中で、MySQL の初期のデフォルト ストレージ エンジンは MyISAM であり、現在のデフォルト ストレージ エンジンは InnoDB です。
テーブル作成時にストレージエンジンを指定する
文
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ] ,
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) ENGINE = INNODB [ COMMENT 表注释 ] ;
- テーブル my_myisam を作成し、MyISAM ストレージ エンジンを指定します。
create table my_myisam(
id int,
name varchar(10)
)engine = MyISAM ;
- テーブル my_memory を作成し、メモリ ストレージ エンジンを指定します
create table my_memory(
id int,
name varchar(10)
)engine = MEMORY ;
ストレージ エンジンの機能
主に、InnoDB、MyISAM、Memory の 3 つのストレージ エンジンの特性について説明します。
InnoDB
1 はじめに
InnoDB は、高信頼性と高性能を考慮した汎用ストレージ エンジンで、MySQL 5.5 以降はデフォルトの
MySQL ストレージ エンジンです。
2. 特徴
- DML 操作は ACID モデルに従い、トランザクションをサポートします。
- 行レベルのロックにより、同時アクセスのパフォーマンスが向上します。
- データの整合性と正確性を確保するために、外部キーFOREIGN KEY 制約をサポートします。
3. 文書化
xxx.ibd: xxx はテーブル名を表します。innoDB エンジンの各テーブルは、テーブル構造(
frm-early、sdi-new バージョン)、データ、テーブルのインデックスを保存するテーブルスペースファイルに対応します。
パラメータ: innodb_file_per_table (デフォルトで有効になりました)
クエリ:show variables like 'innodb_file_per_table';
このパラメータが有効な場合、InnoDB エンジンのテーブルの各テーブルが ibd ファイルに対応することを意味します。
MySQL データ ストレージ ディレクトリ (変更されていないデフォルトの場所は C:\ProgramData\MySQL\MySQL Server 8.0\Data) を直接開きます。このディレクトリには多くのフォルダーがあり、異なるフォルダーは異なるデータベースを表します。スタディ フォルダーを直接開きます。
多くの ibd ファイルが含まれていることがわかります。各 ibd ファイルはテーブル account などのテーブルに対応しており、そのような account.ibd ファイルがあり、この ibd ファイルにはテーブル構造とデータが保存されているだけでなく、このテーブルに対応するインデックス情報も含まれます。
ファイルはバイナリ ストレージに基づいており、メモ帳に基づいて直接開くことはできません。mysql が提供するコマンド ibd2sdi を使用して、ibd ファイルから sdi 情報を抽出できます。sdi データ ディクショナリ情報には、 table のテーブル構造が含まれています。
ibd のテーブル構造を表示するには、次の方法を使用できます。
- 上のパス ボックスを選択し、パスの先頭に「cmd」と入力します。これは、このパスの下でコマンド ライン ウィンドウを開くことを意味します。
- 次に を入力すると
ibd2sdi account.ibd
、このテーブルの基本情報を表示できます。
4. 論理ストレージ構造
- テーブルスペース: InnoDB ストレージ エンジンの論理構造の最上位レベル。ibd ファイルは実際にはテーブルスペース ファイルであり、複数のセグメントを含めることができます。
- セグメント: 表領域はさまざまなセグメントで構成されており、一般的なセグメントにはデータ セグメント、インデックス セグメント、ロールバック セグメントが含まれます。InnoDB のセグメントの管理は、手動制御なしでエンジン自体によって行われ、セグメントには複数の領域が含まれます。
- エリア: エリアはテーブルスペースの単位構造であり、各エリアのサイズは 1M です。デフォルトでは、InnoDB ストレージ エンジンのページ サイズは 16K です。つまり、1 つの領域内に 64 の連続したページがあります。
- ページ: ページは領域の最小単位であり、InnoDB ストレージ エンジンのディスク管理の最小単位でもあります。各ページのデフォルト サイズは 16 KB です。ページの連続性を確保するために、InnoDB ストレージ エンジンは毎回ディスクから 4 ~ 5 つの領域を適用します。
- 行: InnoDB ストレージ エンジンは行指向です。つまり、データは行ごとに保存されます。テーブルの定義時に指定されたフィールドに加えて、各行には 2 つの隠しフィールドが含まれます (詳細は後述)。
マイISAM
1 はじめに
MyISAM は、初期の MySQL のデフォルトのストレージ エンジンでした。
2. 特徴
- トランザクションをサポートせず、外部キーをサポートしません
- テーブルロックはサポートされていますが、行ロックはサポートされていません
- 高速アクセス
3. 文書化
- xxx.sdi: テーブル構造情報を格納します。
- xxx.MYD: ストレージデータ
- xxx.MYI: ストレージインデックス
ここでは、sdi ファイルを直接表示できます。sdi ファイルには辞書が json 形式で保存されているため、メモ帳で sdi ファイルを開いてjscn.cn
にコピーし、json ファイルに変換して内容を表示できます。
メモリー
1 はじめに
メモリ エンジンのテーブル データはメモリに保存されますが、ハードウェアの問題や電源障害の問題により、これらのテーブルは一時テーブルまたはキャッシュとしてのみ使用できます。
2. 特徴
- メモリストレージ
- ハッシュインデックス (デフォルト)
3. 文書化
xxx.sdi: のみがテーブル構造情報の保存に使用されます。そのデータはメモリに保存され、ファイルの形式で直接保存されないためです。
ストレージ エンジンの機能
InnoDB と MyISAM の 3 つの大きな違い (トランザクション、行レベルのロック、外部キー) に焦点を当てています。
特徴 | InnoDB | マイISAM | メモリー |
---|---|---|---|
ストレージ制限 | 64TB | もつ | もつ |
トランザクションのセキュリティ | サポート | - | - |
ロック機構 | 行ロック | テーブルロック | テーブルロック |
B+ツリーインデックス | サポート | サポート | サポート |
ハッシュインデックス | - | - | サポート |
全文インデックス | サポート済み (バージョン 5.6 以降) | サポート | - |
スペースの使用 | 高い | 低い | 該当なし |
メモリ使用量 | 高い | 低い | 中くらい |
一括挿入速度 | 低い | 高い | 高い |
外部キーのサポート | サポート | - | - |
インタビューの質問:
InnoDB エンジンと MyISAM エンジンの違いは何ですか?
①. InnoDB エンジンはトランザクションをサポートしますが、MyISAM はサポートしません。
②. InnoDB エンジンは行ロックとテーブル ロックをサポートしますが、MyISAM はテーブル ロックのみをサポートし、行ロックをサポートしません。
③. InnoDB エンジンは外部キーをサポートしますが、MyISAM はサポートしません。
主な違いは上記の 3 点ですが、もちろんインデックス構造やストレージ制限などの観点からより詳細に回答することもできます。詳細については、次の公式ドキュメントを参照してください
:
innodb
myisam
ストレージエンジンの選択
ストレージ エンジンを選択する際は、アプリケーション システムの特性に応じて適切なストレージ エンジンを選択する必要があります。複雑なアプリケーション システムの場合は、実際の状況に応じて複数のストレージ エンジンを選択して組み合わせることもできます。
- InnoDB: アプリケーションの整合性に対する要件が比較的高く、同時実行条件下でのデータの一貫性が必要な場合、データ操作には挿入とクエリに加えて、多くの更新と削除の操作も含まれるため、InnoDB がより適切な選択肢となります。 InnoDB はトランザクションをサポートします。
- MyISAM: アプリケーションが主に読み取りと挿入の操作を行い、更新と削除の操作はわずかで、高いトランザクション整合性と同時実行性を必要としない場合、このストレージ エンジンは非常に適しています。
- メモリ: すべてのデータを高速アクセス速度でメモリに保存します。通常は一時テーブルとキャッシュに使用されます。メモリの欠点は、テーブルのサイズに制限があることです。大きすぎるテーブルはメモリにキャッシュできません (他のストレージ エンジンはデータを直接ディスクに保存し、ディスクのサイズを保存できます)。データの安全性は保証できません。
電子商取引のフットプリントとコメントは MyISAM エンジンの使用に適しており、キャッシュはメモリ エンジンの使用に適しています。