このトピックでは、PolarDB for MySQL のインメモリ列インデックス(IMCI)機能について説明します。
背景情報
PolarDB for MySQL は、大量のデータを生成するオンラインビジネスを含むオンライントランザクション処理(OLTP)シナリオを対象としています。ただし、行ストアベースの PolarDB for MySQL は、すべてのシナリオのクエリパフォーマンス要件を容易に満たすことはできません。ほとんどの場合、複雑な分析クエリを実行するには、PolarDB for MySQL からデータをエクスポートし、そのデータをオンライン分析処理(OLAP)システムにインポートして分析とクエリを実行する必要があります。これには 2 つのデータベースシステムが必要であり、コスト、アーキテクチャの複雑さ、および O&M の負荷が増加します。
PolarDB for MySQL は、大量のデータに対する複雑なクエリを含む OLAP シナリオ向けに IMCI 機能を提供します。IMCI 機能を使用すると、PolarDB for MySQL は、リアルタイムトランザクション処理とリアルタイムデータ分析を統合した、ワンストップのハイブリッドトランザクション/分析処理(HTAP)ソリューションを提供できます。その結果、1 つのデータベースシステムだけで OLTP シナリオと OLAP シナリオの要件を満たすことができます。
仕組み
次の図は、PolarDB for MySQL での IMCI 機能の仕組みを示しています。
ストレージエンジン、オペレーター、オプティマイザーの 3 つのレイヤーが関係しています。
ストレージエンジンレイヤー:リアルタイムのトランザクション一貫性を保証するハイブリッド行-列ストレージをサポートします。
オペレーターレイヤー:列ストア向けのベクトル化並列オペレーターを使用します。単一テーブルクエリと複数テーブルクエリは、最小限のレイテンシで実装できます。
SQLパーサーおよびオプティマイザーレイヤー:ハイブリッド行-列ストレージ向けの費用ベースのオプティマイザー(CBO)を使用します。オプティマイザーは、クエリリクエストを実行するために、コストのしきい値に基づいて行ストアまたは列ストアを自動的に選択します。
このアーキテクチャにより、PolarDB for MySQL は MySQL プロトコルと完全に互換性がある一方で、クエリを桁違いに高速化できます。
実装
OLAP サービスと OLTP サービス間で計算リソースを分離するために、システムでは読み取り専用ノードでのみ IMCI を作成できます。OLAP クエリは読み取り専用ノードにのみ送信されます。クエリの分散ルールを設定して、OLAP クエリを読み取り専用の行ストアノードに送信するか、読み取り専用の列ストアノードに送信するかを指定できます。詳細については、「行ストアノードと列ストアノード間での HTAP ベースのリクエスト分散の概要」をご参照ください。
メリット
IMCI 機能を搭載した PolarDB for MySQL には、次のメリットがあります。
MySQL との完全な互換性:列ストア用のシステムが提供されています。このシステムは、行ストア用に提供されているシステムと一致しており、柔軟な型変換をサポートしています。
究極の HTAP パフォーマンス:PolarDB は OLTP に関して究極のパフォーマンスを提供します。IMCI 機能は、OLAP システムによって提供されるパフォーマンスに匹敵するパフォーマンスを OLAP に提供します。
ハイブリッド行-列ストレージ:行ストアと列ストアの両方がサポートされているため、コストを節約できます。さらに、行ストアと列ストアのトランザクション一貫性が保証されます。列ストアは、コストが低いという利点もあります。
シナリオ
PolarDB for MySQL の IMCI 機能は、さまざまなビジネスシナリオで使用できるワンストップの HTAP エクスペリエンスを提供します。
リアルタイムレポートなど、オンラインデータのリアルタイム分析が必要なシナリオ。
PolarDB の大容量データストレージ容量に依存して複数のアップストリームデータソースを集約し、PolarDB を専用のデータウェアハウスとして使用するデータウェアハウジングシナリオ。
PolarDB によって提供される IMCI の強力で柔軟な計算機能に依存して SQL 構文を使用して ETL 機能を実装する、抽出、変換、ロード(ETL)向けの高速データコンピューティングシナリオ。

料金
IMCI 機能は無償で提供されます。ただし、読み取り専用の列ストアノードは、一般的な計算ノードの料金に基づいて課金されます。詳細については、「従量課金制の計算ノードの料金」および「サブスクリプションの計算ノードの料金」をご参照ください。IMCI は課金対象のストレージスペースも占有します。詳細については、「ストレージの料金」をご参照ください。
サポートされているバージョン
次の要件のいずれかを満たす Enterprise Edition クラスタ:
リビジョンバージョンが 8.0.1.1.22 以降の PolarDB for MySQL 8.0.1。
リビジョンバージョンが 8.0.2.2.12 以降の PolarDB for MySQL 8.0.2。
X86 CPU アーキテクチャ を使用し、次の条件のいずれかを満たす Standard Edition クラスタ:
リビジョンバージョンが 8.0.1.1.38 以降の PolarDB for MySQL 8.0.1
リビジョンバージョンが 8.0.2.2.19 以降の PolarDB for MySQL 8.0.2
注意事項
インメモリ列インデックス(IMCI)機能は、グローバルデータベースネットワーク(GDN)をサポートしていません。
IMCI は、次の条件下でのみ ホットレプリカによるフェールオーバー 機能の投票ディスクサービス(VDS)モジュールと一緒に使用できます。
リビジョンバージョンが 8.0.1.1.42 以降または 8.0.2.2.23 以降のクラスタの場合:
ホットレプリカによるフェールオーバー機能が有効になっている読み取り専用ノードがクラスタに含まれている場合は、読み取り専用の列ストアノードをクラスタに追加できます。
読み取り専用の列ストアノードがクラスタに既に存在する場合、クラスタ内の読み取り専用ノードのホットスタンバイ機能を有効にすることはできません。
リビジョンバージョンが 8.0.1.1.42 より前または 8.0.2.2.23 より前のクラスタの場合、IMCI 機能をホットレプリカによるフェールオーバー機能と一緒に使用することはできません。
ホットレプリカによるフェールオーバー機能が有効になっている読み取り専用ノードがクラスタに含まれている場合は、読み取り専用の列ストアノードをクラスタに追加することはできません。
説明読み取り専用の列ストアノードをクラスタに追加する場合は、テクニカルサポートに連絡して VDS を無効にしてください。VDS が無効になっている間、クラスタ内のすべてのノードが自動的に再起動されます。
読み取り専用の列ストアノードがクラスタに既に存在する場合、クラスタ内の読み取り専用ノードのホットスタンバイ機能を有効にすることはできません。
パフォーマンスの向上
IMCI 機能は、SQL 文を使用して実行されるクエリを最大 100 倍まで大幅に高速化します。次のセクションでは、高速化効果を確認するためのクエリテストについて説明します。例では、標準 TPC-H ベンチマークに含まれるデータテーブルと SQL 文を使用します。
テスト方法:TPC-H は、データベースの分析クエリ機能を評価するためにトランザクション処理性能評議会(TPC)によって開発およびリリースされた、一般的に使用されるベンチマークです。TPC-H ベンチマークには、8 つのテーブルと 22 の複雑な SQL 文が含まれています。ほとんどのクエリには、複数のテーブルに対する JOIN 句、サブクエリ、および GROUP BY 句が含まれています。
この例では、TPC-H ベンチマークに基づくテストが実装されていますが、TPC-H ベンチマークテストのすべての要件を満たしているわけではありません。したがって、テスト結果は TPC-H ベンチマークテストの公開結果と比較することはできません。
データサイズ: 100 GB。
テスト結果:
IMCI 有効シナリオと IMCI 無効シナリオの比較
次の図は、TPC-H ベンチマークの 22 の複雑な SQL 文が実行されたときの、IMCI 有効シナリオと IMCI 無効シナリオの応答時間の差を示しています。

ClickHouse と IMCI 有効 PolarDB for MySQL の比較
次の図は、TPC-H ベンチマークの 21 の複雑な SQL 文が実行されたときの、ClickHouse と IMCI 有効 PolarDB for MySQL の応答時間の差を示しています。2 つのデータベースは、同じ量のデータと同じデータスキーマを持っています。ClickHouse はクエリ文 21 をサポートしていないため、クエリ文 21 は実行されません。

結論:
IMCI 機能は、ほとんどの複雑なクエリを最大 100 倍まで大幅に高速化します。
従来の OLAP データベースサービスである ClickHouse と IMCI 有効 PolarDB for MySQL は、それぞれに独自の利点があります。IMCI 有効 PolarDB for MySQL は、テーブルに対する SCAN 操作や AGGREGATE 操作、JOIN 操作などのシナリオに優れています。今後、PolarDB for MySQL の IMCI 機能は継続的に調整され、集約の高速化とウィンドウ関数に関して飛躍的な進歩を遂げるでしょう。