ストレージエンジンとはテーブルの種類を指し、データベースのストレージエンジンはコンピュータ内でのテーブル保存方式を決定します。本記事ではTencentDB for MySQLがサポートするストレージエンジンをご紹介します。
InnoDBエンジン
InnoDBエンジンは、最も一般的に使用されるOLTPストレージエンジンであり、マルチバージョン同時実行制御(MVCC)と行レベルロック技術を採用し、ハイパフォーマンスかつ信頼性の高いトランザクション処理能力を提供します。MySQLの他のストレージエンジンと比較して、InnoDBは外部キーやロールバックなど、より優れたデータ完全性をサポートし、より高度な照会機能も提供します。さらに、Tencent CloudはInnoDBに対し多くのカーネル最適化を実施しており、より顕著なパフォーマンス優位性を持たせているため、ハイパフォーマンスかつ高並列処理が求められるアプリケーションシナリオで広く活用されています。
TencentDB for MySQLはデフォルトでInnoDBストレージエンジンをサポートしており、MySQL 5.6以降のバージョンではMyISAMエンジンとMemoryエンジンのサポートを終了しています。主な理由は以下の通りです:
現在のMySQLバージョンでは、TencentDBはInnoDBに対し多くのカーネル最適化を実施しており、すでに明らかなパフォーマンス優位性を有しています。
MyISAMはテーブルレベルロックメカニズムを採用しているのに対し、InnoDBは行レベルロックメカニズムを採用しており、一般的にInnoDBの方がより高い書き込み効率を備えています。
説明:
テーブルレベルロックはMySQLにおいてロック粒度が最大のロックの一種であり、現在の操作中のテーブル全体にロックをかけることを意味します。
行レベルロックはMySQLにおいて最も粒度が細かいロックの一種であり、現在操作中の行に対してのみロックをかけることを意味します。
MyISAMはデータ完全性の保護に欠陥が存在し、これらの欠陥はデータベースデータの破損や紛失を引き起こす可能性があります。さらに、これらの欠陥の多くは設計上の問題であり、互換性を損なうことなく修復することはできません。
MyISAMおよびMemoryからInnoDBへの移行コストは低く、ほとんどのアプリケーションではテーブル作成コードを変更するだけで移行が完了します。
MyISAMの開発はInnoDBへの移行が進んでおり、最新の公式MySQL 8.0バージョンでは、システムテーブルはすべてInnoDBが採用されています。
Memoryはデータの完全性を保証できず、インスタンスの再起動やマスター/スレーブ切り替えが発生すると、テーブル内の全データが失われます。できるだけ早くInnoDBへ移行されることをお勧めします。
RocksDBエンジン
RocksDBは非常に人気のある高性能な永続性キーバリュー(key-value)ストレージであり、TXRocksはTencentのTXSQLチームがこれを基に開発したトランザクション型ストレージエンジンです。TXRocksトランザクションストレージエンジンはRocksDBのLSMツリーストレージ構造を活用し、InnoDBのページの半空状態や断片化による無駄を削減するとともに、コンパクトな形式でのストレージを実現しています。したがって、TXRocksはInnoDBと同等のパフォーマンスを維持しつつ、ストレージスペースをInnoDB比で半分以上節約可能です。トランザクションの読み書きパフォーマンスが求められ、かつ大容量データを扱うビジネスに特に適しています。
よりストレージスペースを節約
InnoDBが使用するB+Treeインデックス構造と比較して、LSMツリーは相当な割合のストレージスペースを節約できます。
ライトアンプリフィケーションがより低い
InnoDBはIn-Place変更方式を採用しており、1行のレコードを変更するだけでもページ全体をディスクに書き込む必要があるため、比較的高いライトアンプリフィケーションとランダム書き込みが発生します。一方、RocksDBはAppend-Only方式を採用しており、比較するとライトアンプリフィケーションがより低くなります。
LibraDBエンジン
LibraDBエンジンは読み取り専用分析エンジンであり、TencentDB for MySQLがサポートする新機能です。この機能は読み取り専用インスタンスを基盤にサービスを提供します。プラグイン可能なエンジン設計により柔軟な作成と破棄を実現し、ユーザーに大規模データ処理と高効率なリアルタイム複雑分析機能を提供します。LibraDBエンジンは主に効率的な分析型クエリにサービスを提供し、顧客にリアルタイムかつハイパフォーマンスな複雑SQL処理を実現する拡張読み取り専用分析コンポーネントです。LibraDBエンジンの列指向ストレージ能力、ベクトル化並列実行エンジン、分散並列実行に対応した拡張オプティマイザを活用することで、顧客はデータベース内で効率的な分析能力を直接体験できます。さらに、LibraDBの列指向ストレージは高QPS変更やトランザクションのACID特性に最適化されており、クエリデータのリアルタイム性と一貫性を保証します。
大規模並列計算 MPP
MPP(Massively Parallel Processing)アーキテクチャをサポートし、ワークロードを複数のノードに分散することでデータ処理パフォーマンスを向上させることができます。
ベクトル化実行エンジン
LibraDBエンジンでは、ベクトル化された実行モードを実装しており、メモリ内の列指向データに対して、1つのバッチでSIMD命令を1回呼び出すことで、関数の呼び出し回数を削減し、キャッシュミスを低減させます。
高速変更シナリオにおける列指向ストレージをサポート
LibraDBエンジンはストレージ層の最適化とサポートにより、高並列処理シナリオにおけるデータ変更時のデータ一貫性を保証し、読み書きインスタンスの頻繁なデータ変更による遅延が原因で分析タイミングを逃すことを回避できます。
データロード能力の指定
LibraDBエンジンはオブジェクトロード機能の指定をサポートしています。データロードのコンソール設定またはコマンドラインSQLを通じて、ロードするLibraDBのオブジェクトを指定できます。
各エンジンがサポートするバージョンとアーキテクチャ
|
InnoDBエンジン | MySQL 5.6、5.7、8.0 | シングルノード、2ノード、3ノード、クラウドディスク版 |
RocksDBエンジン | MySQL 5.7、8.0 | デュアルノード |
LibraDBエンジン | MySQL 5.7、8.0 | 2ノード、3ノード |