データベースが作成されるとき、見過ごされがちですが、パフォーマンスの重要な要素はストレージエンジンです(特にデータベースが大きくなるにつれて)。多くの場合、デフォルトを受け入れてプロジェクトの開発を続けるという誘惑があります。これにより、チームが分析やMySQLダッシュボードを実装する場合など、アプリケーションのライフサイクルの後半でパフォーマンス、バックアップ、データの整合性に予期しない悪影響が生じる可能性があります。
これらの潜在的な落とし穴を回避するために、MySQLでサポートされている最も広く使用されているストレージエンジンのいくつかを詳しく見ていきます(バージョン5.7以降)。
サポートされているストレージエンジン
私の選択肢は何ですか?
デフォルトでは、MySQL 5.7は10個のストレージエンジン(InnoDB、MyISAM、メモリ、CSV、アーカイブ、ブラックホール、NDB、マージ、フェデレーション、および例)をサポートします。サーバーで使用可能でサポートされているものを確認するには、次のコマンドを使用します。
mysql> SHOW ENGINES \ G
これにより、ストレージエンジンのリストが出力され、使用可能なエンジン、使用できないエンジン、または現在デフォルトに設定されているエンジンが示されます。 「サポート:」列には、それぞれ「はい」、「いいえ」、または「デフォルト」が表示されます。
一部のアプリケーションでは、同じデータベース内の異なるテーブルに対して異なるストレージエンジンを使用する必要が生じる場合があります。これは、アプリケーションのデータモデルを慎重に計画する必要がある理由の例です。ただし、ほとんどの場合、必要なストレージエンジンは1つだけです。
ストレージエンジンの機能
彼らは何が得意ですか?
最も一般的に使用されているストレージエンジンのいくつかを詳しく見てみましょう。これにより、各エンジンが何をするように設計されているか、そしてそれらをどのように使用してビジネス目標を達成できるかがわかります。
InnoDB: MySQL 5.7のデフォルトオプションであるInnoDBは、以下を提供する堅牢なストレージエンジンです。
- 完全なACID準拠
- コミット、ロールバック、クラッシュリカバリ
- 行レベルのロック
- 外部キー参照整合性の制約
- マルチユーザーの同時実行性を向上させます(非ロック読み取りを介して)
InnoDBが提供する上記の機能により、MySQLのデフォルトエンジンである理由は明らかです。これは、パフォーマンスが高く、データベースに必要な属性の多くを提供するエンジンです。ただし、そのすべての機能の包括的な説明は、この記事の範囲外です。これは、ほとんどのアプリケーションで使用される可能性が高いエンジンです。
MyISAM: MyISAMを際立たせる機能は、次の機能です。
- 全文検索インデックス
- テーブルレベルのロック
- トランザクションのサポートの欠如
高速ストレージエンジンですが、トランザクションサポートやACID準拠を必要としない、データウェアハウジングやウェブアプリケーションなど、読み取りが多く、ほとんどが読み取りのアプリケーションでの使用に最適です。
NDB (またはNDBCLUSTER):クラスター化された環境でデータベースが機能する場合は、NDBが最適なストレージエンジンです。必要なときに最適です:
- 分散コンピューティング
- 高冗長性
- 高可用性
- 可能な限り高い稼働時間
NDBのサポートは、標準のMySQLServer5.7バイナリの配布には含まれていないことに注意してください。 MySQLClusterの最新のバイナリリリースに更新する必要があります。ただし、クラスター環境で開発している場合は、これらのタスクを処理するために必要な経験がある可能性があります。
CSV: CSV形式のデータを使用する他のアプリケーションとデータを共有する必要がある場合に便利なストレージエンジン。テーブルは、コンマ区切りの値のテキストファイルとして保存されます。これにより、スクリプトやアプリケーションとのデータの共有が容易になりますが、1つの欠点は、CSVファイルにインデックスが付けられないことです。したがって、データは、プロセスのインポート/エクスポート段階までInnoDBテーブルに保存する必要があります。
ブラックホール: このエンジンはデータを受け入れますが、保存しません。 UNIXの/dev/ nullと同様に、クエリは常に空のセットを返します。これは、データをローカルに保存したくない分散データベース環境や、パフォーマンスやその他のテスト状況で役立ちます。
アーカイブ: 名前が示すように、このエンジンはめったに参照されない履歴データに最適です。テーブルにはインデックスが付けられておらず、挿入時に圧縮が行われます。トランザクションはサポートされていません。このストレージエンジンを使用して、過去のデータをアーカイブおよび取得します。
フェデレーション: このストレージエンジンは、複数の異なる物理MySQLサーバーをリンクすることにより、単一のローカル論理データベースを作成するためのものです。ローカルサーバーにはデータが保存されず、クエリはそれぞれのリモートサーバーで自動的に実行されます。分散データマート環境に最適であり、分析レポートにMySQLを使用する場合のパフォーマンスを大幅に向上させることができます。
ストレージエンジンの指定
使用するストレージエンジンを変更するにはどうすればよいですか?
使用されるストレージエンジンは、テーブルの作成時に確立されます。前述のように、InnoDBはMySQLバージョン5.5以降のデフォルトのストレージエンジンです。別のものを使用したい場合は、CREATETABLEステートメント内でこれを行うのが最善です。たとえば、CSVストレージエンジンを使用する必要があるテーブルを特定したとします。過度に単純化されたCREATETABLEステートメントは次のようになります。
mysql> CREATE TABLE Shared_Data(
-> Data_ID INTEGER NOT NULL、
->名前VARCHAR(50)NOT NULL、
->説明VARCHAR(150)
->)ENGINE =’CSV’;
その後、通常どおりINSERTステートメントを実行します。
mysql> INSERT INTO Shared_Data VALUES
->(1、「デバイス1」、「最高の技術の最新バージョン」)、
->(2、「デバイス2」、「市場で最速のもの」);
成功すると、データベースディレクトリを検査すると、Shared_Dataテーブルに挿入したレコードを含む「Shared_Data.CSV」ファイルがその中にあるはずです。
同じ方法論は、MySQLがサポートする多くのストレージエンジンのいずれにも使用できます。 ALTER TABLE
を使用してテーブルを作成した後、ストレージエンジンを変更することは可能ですが ステートメント、それに応じて計画し、最初に設定することがベストプラクティスです。
締めくくり
MySQLには多くのオプションがあります
ご覧のとおり、MySQLは、多くの異なる環境で非常に異なるタスクを処理するように設計されたストレージエンジンのサポートを提供します。使用するエンジンとそれらをいつ使用するかを特定することで、アプリケーションの拡張に伴う不要な複雑化やパフォーマンスの問題を回避できます。
分散コンピューティングクラスターで99.999%の稼働率と信頼性が必要な場合でも、FOREIGN KEY制約を伴うACID準拠のトランザクションサポートが必要な場合でも、MySQLにはニーズに合ったストレージエンジンがあります。
いつものように、プロジェクトの目標と要件を適切に計画および特定することが、アプリケーションに最適なストレージエンジンを正確に特定するための最良の方法です。うまくいけば、この記事がその点であなたを助けるための有用な出発点として役立つでしょう。
この記事はもともとここに掲載されていました。許可を得て再発行。ここに著作権に関する苦情を提出してください。