MariaDBサーバーは元々MySQLから派生したため、プラグイン可能なストレージエンジンアーキテクチャを継承しています。ストレージエンジンが異なれば、パフォーマンスだけでなく機能や可能性に関しても特性が異なります。これにより、ユーザーは、データの目的、データストレージに関する要件、およびデータへのアクセス方法に関係なく、同じストレージエンジンを使用する代わりに、ジョブに適したツールを選択できます。このブログ投稿では、MariaDBで利用可能なオプションを確認し、利用可能なさまざまなストレージエンジンの潜在的な使用例について説明します。
しかし、最初に、ストレージエンジンとは何かを見てみましょう。 MariaDBは、一緒に動作する複数のレイヤーで構成されています。 SQLはそのうちの1つによって解析され、MariaDBは共通のAPIを使用してデータを取得します。内部には、データを含むストレージエンジンがあり、データの要求に反応してデータを抽出し、MariaDBで利用できるようにします。
要するに、MariaDBは行のリクエストを送信し、それを取得して送り返すのはすべてストレージエンジン次第です。 MariaDBは、行がどのように正確に格納されるか、またはどのように取得されるかを気にしません。すべて、ストレージエンジン内の実装に依存します。ストレージエンジンは、さまざまな機能を実装する場合もあります。トランザクションは、ストレージエンジン側でも完全に処理されています。そのため、一部のサポートトランザクションと一部のサポートトランザクションはそうではありません。このアーキテクチャを使用すると、さまざまな問題の解決に特化したさまざまなストレージエンジンを作成できます。
MariaDBサーバーのストレージエンジン
MariaDBには、一連のストレージエンジンが付属しています。簡単なコマンドで利用できるものを確認できます:
MariaDB [(none)]> SHOW STORAGE ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)
ご覧のとおり、それらは多数あります。最も重要なものについて説明します。
InnoDB
InnoDBは、明らかにストレージエンジンです。 OLTPトラフィックを処理するために構築されたトランザクションは、非常に優れたパフォーマンスを提供できます。これはMariaDBで使用されるデフォルトのエンジンであり、何をしているのかわからない限り、データベース用にこのエンジンを使い続けたいと思うでしょう。
MyISAM
MyISAMは、MySQL、次にMariaDBで使用できる「元の」ストレージエンジンの1つです。これはトランザクションではないため、レプリケーションのセットアップや他のほとんどの環境には理想的ではありません。特にインデックスアクセスに関しては依然として非常に高速なエンジンであるため、INSERTのロックやMyISAMの全体的な脆弱性の影響を受けない読み取り専用のワークロードに適しています。
Ariaは、MyISAMの代わりにMariaDB用に作成されたエンジンです。トランザクションではありませんが、クラッシュに対して安全であるため、信頼性が大幅に向上します。現在、システムテーブルと一時テーブルに使用されていますが、データへの高速な読み取り専用アクセスを必要とするワークロードには、MyISAMの代わりに使用することもできます。
これは、一時的なメモリ内テーブルに通常使用されるオールインメモリエンジンです。永続的ではありませんが、一部の読み取り専用ワークロードで機能する可能性があります。
CSV
このストレージエンジンは、データをコンマ区切りの値としてファイルに保存するように設計されています。これは最も使用されているストレージエンジンではなく、非常に特殊化されていますが、MariaDBから他のデータベースソフトウェアやExcelなどのソフトウェアにデータを簡単に抽出するために使用できます。
MariaDBEnterpriseServerのストレージエンジン
MariaDB Enterprise Serverには、コミュニティエディションで利用可能なものに加えていくつかの追加のストレージエンジンが付属しています。それらも見てみましょう。
ColumnStore
これは、分析ワークロード専用のストレージエンジンです。データを保存する特定の方法のおかげで、レポートに頻繁に必要となる大量のデータをより速く取得できます。これは、OLAP(OnLine Analytical Processing)ワークロード用に選択したストレージエンジンである可能性があります。
S3
S3エンジンを使用すると、S3にあるデータにアクセスできます。これは、S3でデータをアーカイブするオプションをユーザーに提供することを目的とした非トランザクションエンジンです。テーブルの作成後は、読み取り専用アクセスを利用できます。
スパイダーエンジンを使用すると、ネットワークを介して複数のMariaDBデータベースに接続し、シャードストレージを作成できます。これはトランザクションであり、データを多数のMariaDB Enterprise Serverに分割し、トラフィックとワークロードをサーバー間で分散することで、ユーザーが簡単にスケールアウトできるようにします。
MyRocks
MyRocksはFacebookで開発されたストレージエンジンであり、書き込みの増幅を減らし、SSDドライブの摩耗を最小限に抑えることを目的としています。これは、OLTPワークロード、特にソーシャルメディアWebサイトで一般的なワークロードを非常にうまく処理する必要があるトランザクションエンジンです。 MyRocksには、InnoDBよりも優れた非常に優れた圧縮機能が付属しています。これは、データセットが大きくなりすぎてInnoDBが適切に処理できない場合に、ストレージの費用を大幅に削減するのに役立ちます。
ご覧のとおり、MariaDBEnterpriseとCommunityServerの両方で、データの保存方法に関して多数のオプションが提供されています。読み取り専用ワークロード、OLAP、または大規模なデータセットに優れたストレージエンジンがあります。適切なものを選ぶのはユーザー次第です。疑わしい場合は、いつでもInnoDBに固執することができます。これは、一般的に非常に優れたパフォーマンスを提供し、ほとんどの場合に十分すぎるはずです。これは、より適切なものを探す必要があるエッジケース向けです。