MySQLのアーキテクチャの概要
全体のMySQLサーバの構成要素は
- 接続プール:接続プールのアセンブリ
- 管理サービスとユーティリティ:アセンブリのための管理サービスとツール
- SQLインターフェース:SQLインタフェースコンポーネント
- パーサ:クエリアナライザコンポーネント
- オプティマイザ:最適化コンポーネント
- キャッシュ&バッファ:バッファ電池モジュール
- プラグイン可能なストレージエンジン:ストレージエンジン
- ファイルシステム:ファイルシステム
1)接続層
トップ層は同様のTCP / IP通信を実現するために、通信と最もローカル靴下ベースのクライアント/サーバ・ツールが含まれ、クライアントとのリンクサービスの数、である。主な接続は、いくつかの同様のプロセス、認可、認証、および関連するセキュリティを完了するために、プログラム。コンセプトは、クライアントの認証によってセキュアなアクセスにスレッドを提供し、床の上のスレッドプールの導入である。また、このレベルにSSLベースのサーバーへの安全なリンクを達成することができ、各顧客のエンドへのアクセスを保護しますそれが操作権限を持っていることを確認します。
2)サービス層
第二層アーキテクチャは、主に、SQLインタフェースとしてコアサービスの大部分を完了し、SQLのキャッシュされたクエリ、分析および最適化を完了し、組み込み関数このようなプロセスとして、このレベルを達成するストレージエンジン全体のすべての機能の一部で実行します、機能など、この層では、サーバはクエリを解析し、対応する内部解析木を作成し、クエリの最適化のそれに対応する完全なリストや索引を使用するかどうかを判断し、最終的に対応する操作が行われた生成する。select文であれば、読み取り操作の多数の決済でそれはシステムのパフォーマンスを向上させるための良い環境できるように、キャッシュ・スペースが十分な大きさである場合、内部サーバは、キャッシュを照会します。
3)エンジン層
ストレージエンジン層、保存と検索MySQLのデータを、APIおよびストレージエンジンを介してサーバーが通信するための真の責任ストレージエンジン。別々のストレージエンジンは、適切なストレージエンジンを選択するために、私たちは彼らのニーズに応じていることを、異なる機能を持っています。
4)ストレージ層
主にファイルシステム上でやり取りするデータ記憶層、および完全なデータストレージおよびストレージエンジン。
そして、MySQL少し異なる他のデータベースに比べて、彼のアーキテクチャが異なる、さまざまなシナリオで使用されると良い役割は、主にストレージエンジン、プラグ可能ストレージエンジンアーキテクチャ、クエリ処理やその他のシステムタスクに反映されて遊ぶことができます抽出されたデータを分離して格納される。このアーキテクチャは、ビジネスの実際のニーズに応じて適切なメモリストレージエンジンを選択することができます。
1.ストレージエンジン
1.1ストレージエンジンの概要
そして、異なるデータベース、MySQLのストレージエンジンのほとんどは、概念があります。別のストレージ要件のための最高のストレージエンジンを選択することができます。
ストレージエンジンを達成するために、データベースの更新やその他の技術を照会データが格納され、インデックスは、テーブルの上ではなく、ライブラリに基づいていることをストレージエンジン。したがって、エンジンはまた、ストレージ・テーブル・タイプと呼ばれてもよいです。
等オラクル、のSQLServer、唯一のデータベースストレージエンジン.MySQLは、プラグインストレージエンジンアーキテクチャを提供するので、そこに複数のMySQLストレージエンジンであり、必要に応じて適切なエンジンを使用するか、または書き込みストレージエンジンができます。
MySQL5.0のストレージエンジンをサポート含む:InnoDBは、MyISAMテーブル、BDB、MEMORY、MERGE、実施例、NDBクラスタ、ARCHIVE、CSV、BLACKHOLE、連合など、トランザクションセーフInnoDBテーブルとBDBテーブルを提供し、他の非トランザクションセーフストレージエンジンのテーブル。
-
Viewデータベースのストレージエンジン
show engines;
結果:
エンジン:ストレージエンジンの名前
サポート:サポートストレージエンジン
コメント:通訳
トランザクション:トランザクションのサポート
デフォルトのデータベースストレージエンジンを見ます
show variables like '%storage_engine%';
結果:
InnoDBの
様々なストレージエンジンの1.2特性
次の表に示すように、共通ストレージエンジン、および各比較エンジン早春の間の差:
機能 | InnoDBの | MyISAMテーブル | MEMORY | マージ | NDB |
---|---|---|---|---|---|
ストレージの制限 | 64TB | 持っています | 持っています | ノー | 持っています |
トランザクションセキュリティ | サポート | ||||
ロック機構 | ラインロック(高い同時実行のために) | テーブルロック | テーブルロック | テーブルロック | 行ロック |
B-treeインデックス | サポート | サポート | サポート | サポート | サポート |
ハッシュインデックス | サポート | ||||
フルテキストインデックス | サポート(バージョン5.6以降) | サポート | |||
クラスタ化インデックス | サポート | ||||
データのインデックス | サポート | サポート | サポート | ||
インデックスキャッシュ | サポート | サポート | サポート | サポート | サポート |
圧縮可能なデータ | サポート | ||||
バルクインサートスピード | 低いです | 高いです | 高いです | 高いです | 高いです |
外部キーをサポートしています | サポート |
二種類のストレージエンジンから最長使用:InnoDBは、MyISAMテーブル、他の2 MEMORY、MERGEは、理解することができます。
1.2.1 InnoDBの
InnoDBストレージエンジンは、MySQLのストレージエンジンのデフォルトのストレージエンジンが.InnoDBがコミットしている提供され、ロールバック、トランザクション安全のクラッシュ回復機能を提供します。しかし、コントラストMyISAMストレージエンジンは、InnoDBの書き込み処理の効率悪化し、そしてデータとインデックスを保持するために、より多くのディスクスペースを占有します。
他のストレージエンジンは異なるInnoDBストレージエンジン特性:
トランザクション制御:
create table goods_innodb(
id int not null auto_increment,
name varchar(20) not null,
primary key(id)
)ENGINE=innodb DEFAULT CHARSET=UTF-8;
START transaction;
insert into goods_innodb(id,name) values(null,'Meta20');
commit;
InnoDBはトランザクションです
MySQLのストレージエンジンは、対応するインデックス、外部キーを作成するサブテーブルを持っている必要があります親テーブルを必要とし、外部キーを作成するときにのみ、InnoDBは、それが自動的に対応するインデックスを作成する外部キーをサポートしています。
次の2つの表COUNTRY_IDキーインデックスのグループで、country_innoDBは、親テーブルで、city_innodb表には主キーテーブルCOUNTRY_IDのcountry_innodbに対応し、COUNTRY_ID外部キーフィールド子です。
CREATE TABLE country_innodb(
country_id INT NOT NULL AUTO_INCREMENT,
country_name VARCHAR(100) NOT NULL,
PRIMARY KEY(country_id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
CREATE TABLE city_innodb(
city_id INT NOT NULL AUTO_INCREMENT,
city_name VARCHAR(50) NOT NULL,
country_id INT NOT NULL,
PRIMARY KEY(city_id),
KEY idx_fk_country_id(country_id),
CONSTRAINT 'fk_city_country' FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=INNODB DEFAULT CHARSET=utf8;
insert into country_innodb values(null,'China'),(null,'America'),(null,'Japan');
insert into city_innodb values(null,'Xian',1),(null,'NewYork',2),(null,'BeiJing',1);
あなたは、インデックスを作成する場合、削除するとき、あなたは、RESTRICTを含め、手術台のために、親テーブルを更新し、CASCADE、SET NULLおよびNO ACTIONを指定することができます。
ケース関連するサブテーブル手段に限定されるものと同じ制限し、NO ACTION、親テーブルを更新することができません。
親テーブルは、カスケード更新または削除、更新、またはサブテーブルに対応する削除レコードを表す場合、
SET NULL更新またはサブフィールドに対応するテーブルが設定されたNULLである場合、親テーブルで削除示します。
上記の二つのテーブルの場合、外部キーを削除することはできません、子テーブル内の対応するレコードがある場合にON ON UPDATE CASCADEモードをRESTRICT削除されたテーブルには、メインテーブル内のレコードは、時間を削除するように指定されている、更新レコードを主テーブルに子テーブルは、対応するレコードを持っている場合、時間、子テーブルは、更新に対応します。
ON DELETE RESTRICT --删除主表数据时,如果有关联记录,不删除;
ON UPDATE CASCADE --更新主表时,如果子表有关联记录,更新字表记录;
ストレージ:
次の2つの方法でInnoDBストレージテーブルとインデックス:
- 保存された共有空間テーブルを使用して、テーブル構造は、このようにし.FRMテーブルがファイルに格納され、インデックスデータテーブルとinnodb_data_home_dirをinnodb_data_file_pathが定義された空間に格納されて作成された、複数のファイルであってもよいです
- マルチテーブル・ストレージ・スペース、.frmファイルの存在下で投げるその後、この方法で作成し、テーブル構造が、内の別々の.ibdに格納された各テーブルとインデックスのデータを使用してください。
1.2.2MyISAM
MyISAMテーブルは、トランザクションが外部キーをサポートしていませんサポートしていない、とその利点は、アクセスの速さ、トランザクションの整合性を必要としないか、テーブルを作成するには、INSERTは基本的にベースのアプリケーションは、このエンジンを使用することができます選択することです。あり2もっと重要な点
これは、トランザクションをサポートしていません。
create table goods_myisam(
id int not null auto_increment,
name varchar(20) not null,
primary kry(id)
)ENGINE=myisam DEFAULT CHARSET=utf8;
ここでは悪いのロールバックがあります。
ファイルストレージ
三つのファイルにディスク上の各MyISAMストレージは、ファイル名とテーブル名は同じですが、拡張子は以下のとおりです。
.FRM(記憶テーブル)。
.MYD(MYDATA、格納データ)。
.MYI(MYIndex、記憶指数);
MEMORY
メモリストレージエンジンデータテーブルメモリに格納されます。MEMORY実際のディスクファイル形式に各テーブルが対応全体の迅速な処理を改善するために、それはデータの良い迅速な処理であり、ファイル格納テーブルの構造のみ、.FRMであり、そのデータファイルがメモリに格納され、テーブル全体の効率を向上させます。テーブルアクセスのメモリタイプは、自分のデータをメモリに格納されているため、非常に高速で、デフォルトでHASHインデックスを使用しますが、サービスがクローズされると、データテーブルが失われます。
1.2.4MERGE
MyISAMテーブルの内側に実際にMERGEストレージエンジンは、MERGEテーブル自体、これらのテーブルは、同一構造のMyISAMを持っている必要があり、MyISAMテーブルの集合の組み合わせであり、何もデータが格納されていない、タイプMERGEのテーブルを照会することができ、更新、削除操作、テーブル。
挿入操作が対応最初または最後のテーブルに作用するように、挿入型MERGEテーブルため、INSERT_METHOD句定義テーブルを挿入することによって、最初または最後の値を用いて、3つの異なる値があるかもしれない、これは定義されていません句、または挿入動作を示す、NOに定義は、この表MERGEに行うことができません。
DROP操作は、MERGEテーブル上で実行することができますが、この操作はちょうどMERGEテーブルの定義を削除し、内部テーブルは影響を受けません。
ここでMERGEテーブルを作成および使用の例であります
1)3つのテストテーブルpayment_1990、payment_1991、payment_all、そのpayment_all MERGEテーブルを作成する二つのテーブルです。
create table order_1990(
order_id int,
order_money double(10,2),
order_address varchar(50),
primary key(order_id)
)engine = myisam default charset=utf8;
create table order_1991(
order_id int,
order_money double(10,2),
order_address varchar(50),
primary key(order_id)
)engine = myisam default charset=utf8;
create table order_all(
order_id int,
order_money double(10,2),
order_address varchar(50),
primary key(order_id)
)engine =merge union(order_1990,order_1991) INSERT_METHOD=LAST default charset=utf8;
2)表中の二つのレコードに挿入され
INSERT INTO order_1990 VALUES(1,100.0,'北京');
INSERT INTO order_1990 VALUES(2,100.0,'上海');
INSERT INTO order_1991 VALUES(10,200.0,'北京');
INSERT INTO order_1991 VALUES(11,200.0,'上海');
order_all結果:
選択肢の1.3ストレージエンジン
ストレージエンジンを選択する場合、エンジンは、アプリケーションの特性に応じて適切なストレージシステムを選択すべきです。複雑なアプリケーションのために、あなたはまた、実際の状況に応じてストレージエンジンの様々な組み合わせを選択することができます。以下は、いくつかの一般的なストレージエンジン環境です。
- InnoDBは:アプリケーションがデータの挿入とクエリ以外の操作に加えて、同時条件の下で、データの一貫性の要件については、比較的高い需要がある場合は手続きを処理するトランザクションのためのMySQLのデフォルトのストレージエンジンの、外部キーは、トランザクションの整合性をサポートしています。 、また、多くの更新が含まれています削除し、InnoDBストレージエンジンが効果的に削除および更新が原因を減らすに加えて、より適切な選択肢.InnoDBストレージエンジンがロックを引き起こしている、あなたも同様の用語のトランザクションの整合性コミットとロールバックを確保することができます料金システムやデータの精度要件のための金融システムは、InnoDBが最も適切な選択である、比較的高いシステムです。
- MyISAMテーブル:アプリケーションが読み込まれると、挿入、更新および削除操作、およびトランザクションの整合性の、ほんの数を操作がベースの場合は、同時実行性の要件が高く、その後、ストレージエンジンは非常に適して選択できません。
- MEMORY:RAMに格納されている全てのデータ(ランダム・アクセス・メモリ(英語:ランダムアクセスメモリ、略称:メインメモリとして知られているRAM)は、あるCPUに直接()時にリフレッシュを除き、いつでも読むことができます内部メモリのデータを交換します。 、高速、通常、オペレーティング・システムまたはその他のプログラム(記憶)指定された書き込みアドレス.RAM一時的な作業データ記憶媒体のいずれかから任意の時点で実行するか(抽出)読み取られた情報、それ最大の違いは、揮発性ROMデータ、すなわち、パワーダウンに格納されたデータは、その後、一時的にすばやくレコードを検索するために、コンピュータとデジタルシステム)、必要にプログラム、データ及び中間結果を格納するために失われた.RAMであろうと数へのアクセスを提供する他の同様のデータ環境。MEMORY欠陥がテーブルのサイズに制限があることであり、テーブルは、データを復元することができることを確実にするためにテーブルに続いて、メモリにキャッシュされ、データベースの異常終了後にテーブル内のデータを復元することができるの多くすることができません。MEMORYテーブルは通常、すぐに結果へのアクセスを得るために小さなテーブルのためにあまり頻繁に更新されます。
- MERGE:同一のMyISAMテーブルの一連の論理的にグループ化するための、および個々のMyISAMテーブルに.MERGEサイズの制限を解除し、複数の異なるテーブルによって分配することができるオブジェクト参照テーブルとしてのそれらの利点ディスク上に、効果的にアクセスMERGEテーブルの効率を向上させることができる。これは、データウェアハウスVLDB環境として、貯蔵のために非常に適しています。