MySQLのストレージエンジンの詳細な説明

MySQLのストレージエンジンの詳細な説明

MySQL ストレージ エンジンの概要

ストレージ エンジンとは何ですか?

MySQL のデータは、さまざまな手法を使用してファイル (またはメモリ) に保存されます。これらのテクノロジはそれぞれ異なるストレージ メカニズム、インデックス作成手法、ロック レベルを使用し、最終的にはさまざまな機能と能力を提供します。さまざまなテクノロジーを選択することで、速度や機能が向上し、アプリケーションの全体的な機能が向上します。

たとえば、大量の一時データを扱う場合は、メモリ内ストレージ エンジンを使用することをお勧めします。インメモリ ストレージ エンジンは、すべてのテーブル データをメモリ内に保存できます。あるいは、トランザクションをサポートするデータベースが必要になる場合があります (トランザクションが失敗した場合にデータがロールバックされるようにするため)。

これらのさまざまなテクノロジーとそれに関連する機能は、MySQL ではストレージ エンジン (テーブル タイプとも呼ばれます) と呼ばれます。

MySQL には、デフォルトで構成されたさまざまなストレージ エンジンが付属しており、これらは MySQL サーバーで事前に構成することも、有効にすることもできます。サーバー、データベース、およびテーブルのストレージ エンジンを選択して、情報の保存方法、取得方法、およびデータに必要なパフォーマンスと機能を選択する際に最大限の柔軟性を得ることができます。

データの保存方法と取得方法を柔軟に選択できることが、MySQL が人気を博している主な理由です。他のデータベース システム (ほとんどの商用オプションを含む) は、1 種類のデータ ストレージのみをサポートします。

残念ながら、他の種類のデータベース ソリューションで採用されている「1 つのサイズですべてに対応」するアプローチでは、パフォーマンスがいくらか犠牲になるか、データベースを詳細に調整するのに何時間、あるいは何日も費やすことになります。 MySQL では、使用するストレージ エンジンを変更するだけで済みます。

MySQL はどのようなストレージ エンジンをサポートしていますか?

MySQL 5.6 でサポートされているストレージ エンジンには、InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA などがあります。 NDB と InnoDB はトランザクションセーフなテーブルを提供しますが、他のストレージ エンジンはトランザクションセーフではないテーブルを提供します。

各種ストレージエンジンの機能

概要

MySQL サーバーは、図の「プラグ可能なストレージ エンジン」セクションに示すように、実行中の新しい MySQL サーバーにストレージ エンジンをロードできる、マルチレイヤー設計と独立したモジュールであるプラグイン ストレージ エンジン アーキテクチャを使用します。 MySQL サーバー アーキテクチャでは、一貫性のあるシンプルなアプリケーション モデルと API がストレージ レベル (つまり、プラグ可能なストレージ エンジン) で提供されるため、アプリケーション プログラマーと DBA は、基盤となる実装の詳細をすべて考慮する必要がなくなりました。したがって、ストレージ エンジンごとに機能が異なりますが、アプリケーションはストレージ エンジンから切り離されています。ストレージ エンジンはファイル システムの処理を担当します。

各種ストレージエンジンの機能

同時実行性: 一部のアプリケーションでは、他のアプリケーションよりも細かいロック要件 (行レベルのロックなど) が求められます。

トランザクション サポート: すべてのアプリケーションでトランザクションが必要なわけではありませんが、トランザクションが必要なアプリケーションでは、ACID 準拠などの明確に定義された要件があります。

参照整合性: DDL で定義された外部キーを通じて、サーバーは関連付けられたデータベースの参照整合性を強制する必要があります。

物理ストレージ: これには、テーブルとインデックスの合計ページ サイズから、データの保存に必要な形式、物理ディスクまで、さまざまなものが含まれます。

インデックスのサポート: アプリケーションによって、採用されるインデックス戦略は異なります。通常、各ストレージ エンジンには独自のインデックス方法がありますが、一部のインデックス方法 (B ツリー インデックスなど) は、ほぼすべてのストレージ エンジンに共通です。

メモリ キャッシュ: アプリケーションによって、特定のメモリ キャッシュ戦略に対する応答性が異なります。そのため、一部のメモリ キャッシュはすべてのストレージ エンジンに共通ですが (ユーザー接続のキャッシュ、MySQL の高速クエリ キャッシュなど)、他のキャッシュ戦略は特定のストレージ エンジンを使用する場合にのみ一意に定義されます。

パフォーマンス支援: 並列操作、スレッドの同時実行、データベース チェックポイント、バッチ挿入処理などのための複数の I/O スレッドが含まれます。

その他のターゲット機能: 地理空間操作のサポート、特定のデータ処理操作に対するセキュリティ制限などが含まれる場合があります。

上記の要件は、さまざまなニーズに反映されます。単一のシステムでこれらを実現することは不可能です。上記の特性の中には、それ自体が矛盾しているものもあり、一石二鳥の問題です。上記についていくつかの選択を行うことで、結果として得られるストレージ エンジンは、特定のニーズに使用できるプラグイン エンジンになります。下の図に示すように、既存のストレージ エンジンとその基本機能の一部は次のとおりです。

各種検索エンジンの紹介

翻訳

MySql 5.6 のデフォルトのストレージ エンジン。 InnoDB は、ユーザー データを保護するためのコミット、ロールバック、クラッシュ回復機能を備えたトランザクション セーフ ストレージ エンジンです。 InnoDB の行レベルのロックと Oracle スタイルの一貫したロックフリー読み取りにより、マルチユーザーの同時実行性とパフォーマンスが向上します。 InnoDB は、ユーザー データをクラスター化インデックスに保存し、主キーに基づく一般的なクエリの I/O オーバーヘッドを削減します。データの整合性を確保するために、InnoDB は外部キー制約もサポートしています。

マイISAM

MyISAM はトランザクションも外部キーもサポートしていません。アクセス速度が速いのが利点ですが、テーブルレベルのロックにより、読み取り/書き込み負荷でのパフォーマンスが制限されます。そのため、読み取り専用または読み取りが中心のデータ シナリオでよく使用されます。

メモリ

すべてのデータはメモリに保存され、重要でないデータの迅速な検索に使用されます。メモリ タイプのテーブルは、データがメモリに保存され、デフォルトで HASH インデックスを使用するため、データに非常に高速にアクセスしますが、サービスがシャットダウンされると、テーブル内のデータは失われます。

ブラックホール

ブラックホール ストレージ エンジンは、Unix の /dev/null に似ていますが、Archive はデータを受信するだけで保存しません。このエンジンのテーブルに対するクエリでは、多くの場合、空のセットが返されます。このテーブルは、DML ステートメントをスレーブ サーバーに送信する必要があるが、マスター サーバーはこのデータのコピーを保持しないマスター スレーブ構成で使用できます。

CSVファイル

そのテーブルは実際にはコンマで区切られたテキスト ファイルです。 CSV テーブルを使用すると、同じ読み取りおよび書き込み形式でスクリプトやアプリケーションと対話しながら、CSV 形式でデータをインポートおよびエクスポートできます。 CSV テーブルにはインデックスがないため、通常の操作ではデータを InnoDB テーブルに格納し、インポートまたはエクスポートのフェーズでのみ CSV テーブルを使用する方が適切です。

NDB

(別名 NDBCLUSTER) - このクラスター化されたデータベース エンジンは、最高レベルの稼働時間と可用性を必要とするアプリケーションに特に適しています。注意: NDB ストレージ エンジンは、標準の MySQL 5.6 バージョンではサポートされていません。現在サポート中

MySQL Cluster のバージョンは、MySQL 5.1 に基づく MySQL Cluster NDB 7.1、MySQL 5.5 に基づく MySQL Cluster NDB 7.2、MySQL 5.6 に基づく MySQL Cluster NDB 7.3 です。 MySQL Cluster NDB 7.4 も MySql 5.6 をベースにしており、現在開発中です。

マージ

MySql DBA または開発者が一連の同一の MyISAM テーブルをグループ化し、それらを単一のオブジェクトとして参照できるようにします。データ ウェアハウスなどの超大規模データ シナリオに適用できます。

フェデレーション

複数の物理マシンから異なる MySQL サーバーを接続して論理データベースを作成する機能を提供します。分散型またはデータ市場のシナリオに適しています。

このストレージ エンジンは、新しいストレージ エンジンの作成を開始する方法を示す MySQL ソース コードの例を保存するために使用されます。主に興味のある開発者を対象としています。このストレージ エンジンは、何もしない単なる「スタブ」です。このエンジンを使用してテーブルを作成することはできますが、テーブルにデータを保存したり、テーブルからインデックスを取得したりすることはできません。

一般的なストレージエンジンと適用可能なシナリオ

翻訳

トランザクション処理アプリケーションでは、外部キーと行レベルのロックをサポートします。アプリケーションが物事の整合性に対して比較的高い要件を持ち、同時実行条件下でデータの一貫性を必要とし、データ操作に挿入やクエリに加えて多くの更新および削除操作が含まれる場合は、InnoDB ストレージ エンジンがより適しています。 InnoDB は、削除や更新によって発生するロックを効果的に削減するだけでなく、トランザクションの完全な送信とロールバックも保証します。これは、課金システムや金融システムなど、データの精度に対する要件が高いシステムに適しています。

取引

マイISAM

アプリケーションが主に読み取りと挿入操作に基づいており、更新と削除の操作はわずかで、トランザクションの整合性と同時実行性に対する要件が高くない場合は、このストレージ エンジンを選択できます。

メモリ

すべてのデータをメモリ内に保持すると、レコードやその他の同様のデータをすばやく見つける必要のある環境で非常に高速なアクセスが可能になります。メモリの欠点は、テーブルのサイズが制限されることです。データベースが異常終了した場合はデータを正常に復元できますが、データベースが閉じられると、メモリに保存されたデータは失われます。

MySQLでのストレージエンジンの使用

ストレージエンジン関連のSQL文

--現在のデフォルトのストレージ エンジンを表示します。
mysql> 「default_storage_engine」のような変数を表示します。
--現在のデータベースでサポートされているストレージ エンジンを照会します。mysql> show engines \G;

結果

テーブルを作成するためのストレージエンジンを指定します

テーブル作成時に指定する

mysql> テーブル ai(id bigint(12),name varchar(200)) を作成します。ENGINE=MyISAM;
mysql> テーブル country(id int(4),cname varchar(50)) を作成します。ENGINE=InnoDB;

--alter table ステートメントを使用して、既存のテーブルのストレージ エンジンを変更することもできます。
mysql> テーブル ai エンジンを innodb に変更します。

設定ファイルで指定する

#my.ini ファイル [mysqld]
デフォルトのストレージエンジン=INNODB

MySQLワークフロー

MySQL アーキテクチャには合計 4 つのレイヤーがあり、上図では点線で区切られています。

まず、トップレベルのサービスは MySQL に固有のものではありません。ネットワークに提供されるほとんどのクライアント/サーバー ツールまたはサービスは、同様のアーキテクチャを備えています。例: 接続処理、認可認証、セキュリティなど。

アーキテクチャの 2 番目のレイヤーには、MySQL コア サービスのほとんどが含まれます。含まれるもの: クエリ解析、分析、最適化、キャッシュ、およびすべての組み込み関数 (日付、時刻、数学、暗号化関数など)。同時に、ストアド プロシージャ、トリガー、ビューなど、すべてのクロス ストレージ エンジン機能がこのレイヤーで実装されます。

3 番目のレイヤーにはストレージ エンジンが含まれます。ストレージ エンジンは、MySQL でのデータの保存と取得を担当します。サーバーは API を介してストレージ エンジンと通信します。これらのインターフェースは、異なるストレージ エンジン間の違いを隠蔽し、これらの違いを上位レベルのクエリ プロセスに対して透過的にします。ストレージ エンジン API には、「トランザクションの開始」などの操作を実行するための 12 を超える低レベル関数が含まれています。ただし、ストレージ エンジンは通常 SQL を解析しません (InnoDB はこの機能自体を実装していないため、外部キー定義を解析します)。また、異なるストレージ エンジンは相互に通信せず、上位レベルのサーバー要求に応答するだけです。

4 番目の層にはファイル システムが含まれます。すべてのテーブル構造とデータ、およびユーザー操作のログは、最終的にファイルの形式でハード ディスクに保存されます。

上記はMySQLのストレージエンジンの詳細な説明です。MySQLストレージエンジンの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLアーキテクチャに基づく分析
  • MySQLアーキテクチャに基づく詳細な分析
  • MySQLメモリストレージエンジンに関する知識
  • MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明
  • MySQL のストレージ エンジンの違いと比較
  • MySQL シリーズ 7 MySQL ストレージ エンジン
  • MySQLのInnoDBストレージエンジンにおけるさまざまなロックの詳細な説明
  • MySQL の MyISAM ストレージ エンジンにおける非クラスター化インデックスの詳細な説明
  • MySQL ストレージ エンジン InnoDB と MyISAM
  • MySQL アーキテクチャとストレージ エンジンの紹介

<<:  nginx アンチホットリンクおよびアンチクローラー設定の詳細な説明

>>:  JavaScript でグレイウルフのポットビーティングゲームを実装

推薦する

Taobao ストアでズームインする効果は、スライドショーを使用する原理に似ています。

今日は、スライドを使用する原理に似た、Taobao のフロントエンドのマウス ズーム効果に慣れました...

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

古典的なスネークゲームの JavaScript 実装

この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに...

CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

Web デザインでよく耳にするプロパティ名: content、padding、border、marg...

MySQL カーソルの概念と使用法の詳細な説明

この記事では、例を使用して MySQL カーソルの概念と使用方法を説明します。ご参考までに、詳細は以...

Chrome Dev Tools を使用してページのパフォーマンスを分析する方法 (フロントエンドのパフォーマンス最適化)

背景開発やデバッグには Chrome Dev Tools がよく使用されますが、ページのパフォーマン...

Ubuntu Linuxシステムをインストールするときにハードディスクをパーティション分割する最も合理的な方法の詳細な説明

Windows または Linux オペレーティング システムをインストールするかどうかに関係なく、...

Reactにおけるキーの役割の詳細な説明

目次質問: ボタンをクリックすると、スパンの色が赤に変わりますか?上記の問題を分析します。 2番目の...

CSS3は円錐グラデーション効果を実現します

文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...

面接の質問: 3 行 3 列のレイアウト、表は結合され、ネストされた表は許可されません

面接の質問で、3 行 3 列のレイアウトが求められます。1 行目の 2 番目の列と 2 行目の 2 ...

VMwareを使用したPermeateレンジシステムのインストール手順の詳細説明

1. 背景私たちは時々社内研修を行っており、実験環境をよく利用しています。最初はdockerコンテナ...

HTML の POST リクエストにおける a タグの 2 つの使用法の分析

HTML POST リクエストで a タグを使用する 2 つの例を次に示します。 1. ajaxを使...