このトピックでは、クラスター化カラムナインデックス (CCI) 機能について説明します。
オンライン トランザクション処理 (OLTP) とオンライン分析処理 (OLAP) のソリューションは、読み書き分離または抽出、変換、ロード (ETL) モデルに基づいて開発されています。これらのソリューションは、オンラインデータベースからデータを抽出し、T+1 方式で分析のためにデータウェアハウスにロードします。しかし、これらのソリューションには、高いストレージコスト、リアルタイム性の低さ、高いメンテナンスコストと接続コストなど、いくつかの欠点があります。
爆発的なデータ増加に対応するため、PolarDB-X は Object Storage Service (OSS) に基づく CCI 機能を提供します。この機能により、行指向データをリアルタイムで列指向データに同期させることができ、以下の機能をサポートします。
CCI 機能は、統合された OLTP とリアルタイムデータ分析をサポートし、OLTP と OLAP が関わるシナリオの要件を満たします。
PolarDB-X の CCI 機能は、インテリジェントなルーティングと超並列処理 (MPP) をサポートします。コンピューティングレイヤーは、トランザクション処理 (TP) トラフィックと分析処理 (AP) トラフィックを正確に識別し、異なる記憶媒体にトラフィックをルーティングします。デフォルトでは、コンピューティングレイヤーは AP トレースで MPP が有効になっていることを保証し、CCI をスキャンします。これにより、クエリ分析能力が大幅に向上します。
CCI 機能は、Delta+Main モデルを使用して、秒単位のリアルタイム更新を実現します。この機能は Multi-Version Concurrency Control (MVCC) と統合されており、いつでも一貫性のあるスナップショットデータを読み取ることができます。
注意事項
CCI 機能は、バージョン 5.4.19-16989811 以降の Enterprise Edition インスタンスでのみサポートされます。
AUTO モードのデータベースのみが CCI の作成をサポートします。
説明インスタンスのバージョン管理については、「リリースノート」をご参照ください。
PolarDB-X インスタンスのバージョンの表示方法については、「PolarDB for Xscale インスタンスのエンジンバージョンの表示と更新」をご参照ください。
アーキテクチャ
行指向と列指向のハイブリッドストレージ
主要コンポーネント
コンピューティングノード (CN) はシステムの入り口です。これらのノードはステートレス設計を採用しており、SQL パーサー、オプティマイザー、エグゼキュータなどのモデルを含みます。CN は、分散データのルーティング、計算、動的スケジューリング、2 フェーズコミット (2PC) プロトコルに基づく分散トランザクションの調整、およびグローバルセカンダリインデックスのメンテナンスを担当します。CN は、SQL スロットリングや三権分立モードなどのエンタープライズレベルの機能を提供します。
データノード (DN) は、行指向データの永続化を担当します。DN はデータの耐久性を保証し、マルチマジョリティ Paxos プロトコルに基づいて強力な整合性を提供します。DN は MVCC を使用して分散トランザクションの可視性を維持します。 DN は、Project、Filter、Join、Aggregation など、分散アーキテクチャでコンピューティングタスクをプッシュダウンする必要がある操作の要件も満たすことができます。
Global Meta Service (GMS) は、テーブルメタデータ、スキーマメタデータ、統計メタデータなど、グローバルに一貫性のあるシステムメタデータの維持を担当します。GMS は、ユーザーアカウントや権限などのセキュリティ関連情報を管理します。GMS は Timestamp Oracle (TSO) サービスを提供します。
Change Data Capture (CDC) は、MySQL バイナリログのフォーマットとプロトコルに完全互換の増分サブスクリプション機能を提供します。CDC は、MySQL レプリケーションプロトコルと互換性のあるプライマリ/セカンダリレプリケーション機能も提供します。
Columnar は永続的な CCI を提供し、分散トランザクションのバイナリログをリアルタイムで消費し、OSS に基づいて CCI を構築してリアルタイム更新の要件を満たします。CN と組み合わせることで、Columnar は CCI のスナップショット一貫性のあるクエリ機能を提供できます。
列指向ストレージ
アーキテクチャの概念
クラウドネイティブ技術の普及に伴い、Snowflake などの新世代クラウドネイティブデータウェアハウスや HTAP アーキテクチャが継続的にイノベーションを推進しています。近い将来、HTAP 機能を備えた行指向と列指向のハイブリッドストレージがデータベースの標準要件になることは明らかです。したがって、現在の列指向ストレージの設計において、コスト効率、使いやすさ、高性能といった未来志向の側面に焦点を当てることが重要です。
PolarDB-X は CCI 機能を提供します。デフォルトでは、PolarDB-X の行指向テーブルには主キーインデックスとセカンダリインデックスがあります。CCI は、列指向構造の上に構築されたセカンダリインデックスであり、行指向テーブルのすべての列に対して有効です。テーブルには、行指向データと列指向データを含めることができます。
アーキテクチャの特徴
クラウドネイティブアーキテクチャ (ストレージとコンピューティングの分離とコスト効率)
PolarDB-X の CCI 機能は、プライマリデータストレージとして OSS を使用しており、ローカルディスクベースのストレージコストの 6 分の 1 から 10 分の 1 のコストで済みます。この機能はまた、他のデータ型の 3 倍から 5 倍の列指向データの高い圧縮率を実現します。これにより、CCI 機能は低コストで競争上の優位性を得られます。行指向と列指向のハイブリッドストレージが関わる HTAP シナリオでは、追加の列指向ストレージコストを行指向ストレージコストの 5% から 10% 以内に抑えることができます。
PolarDB-X の CCI 機能は、LSM 構造に似た Delta+Main の 2 層モデルと、ストレージレイヤーでのタグ削除技術を活用して、OSS を使用する際に高い同時実行更新機能を提供します。また、CCI 機能が OSS からデータを読み取るトレースでは、複数層のローカルデータキャッシュと多段階の統計メカニズムが採用されており、OSS ストレージデータへの不要なリモートアクセスを最小限に抑えます。
分散データベースシステム (線形スケーリング)
従来の分散データベースでは、CCI は一般的に Paxos または Raft プロトコルに基づくマルチレプリカメカニズムを使用して構築されます。しかし、OLTP と OLAP はクエリ要件やリソース依存度が異なります。異なるレプリカ間の強力な整合性を持つパーティショニングポリシーとスケーリングメカニズムは、TP と AP の線形スケーリング能力を制限し、データベースパフォーマンスを低下させる可能性があります。
PolarDB-X の CCI 機能は、分散トランザクションのバイナリログのリアルタイム同期に基づいて、行指向データから列指向データへの異種変換 (M:N) を実装します。この機能は、CCI の分散パーティションキーとソートキーを定義します。PolarDB-X は、分散並列処理技術を活用して、CCI ベースのクエリに線形スケーラビリティを提供します。行指向と列指向の記憶媒体は互いに分離されています。これにより、ストレージとコンピューティングリソースを容易にスケーリングできます。分散環境では、CCI ベースのクエリは極めて高い線形スケーラビリティの恩恵を受けることができます。
読み書き分離 (読み取りに対する従量課金制のサーバーレスアーキテクチャ)
PolarDB-X の CCI 機能は、コンポーネントベースの読み書き分離アーキテクチャを採用しています。このアーキテクチャは、列ストアノードとコンピューティングノードで構成されます。列ストアノードは、外部クライアントからの書き込みリクエストを直接処理しないステートレスノードです。代わりに、これらのノードはグループコミット技術を活用して CCI データを一括更新します。コンピューティングノードは、GMS ノードからカラムナメタデータを取得し、OSS に保存されている CCI データに直接アクセスするステートレスノードです。
PolarDB-X インスタンスを作成する場合、システムは自動的に列ストアノードを提供します。これらのノードは継続的に実行され、CCI を同期します。DDL 文を実行するだけで簡単に CCI を作成できます。CCI が構築されると、CCI データは自動的に生成され、リアルタイムで更新されます。プライマリインスタンスを使用するか、追加の読み取り専用インスタンスを購入して、行ストアインデックスと CCI にアクセスできます。サーバーレスモードは、ステートレスな CN にも適しています。CN の使用量に対してのみ課金されます。
行指向と列指向ストレージの組み合わせ (使いやすさ、統合されたベクトル化 SQL エンジン)
PolarDB-X は、CN の SQL エンジンを再利用して、CN の完全な機能を提供します。行指向と列指向のハイブリッドシナリオ向けにコストオプティマイザーが組み込まれています。このコストオプティマイザーは、実行コストに基づいてインテリジェントにルートを識別し、OLTP クエリを行ストアクエリトレースに、OLAP クエリを CCI ベースのクエリトレースに転送します。コストオプティマイザーを使用すると、SQL オペレーターレベルで異なる行指向データと列指向データにアクセスでき、HTAP の行指向と列指向のハイブリッド機能を完全に実装できます。コストオプティマイザーは、一連の SQL エンジンへの統一されたアクセスも可能にします。
PolarDB-X はベクトル化と完全に互換性があります。カラムナチャンクのデータ構造は、TableScan オペレーターが列指向データを読み取るために使用されます。後続のオペレーター計算も、チャンクのインメモリ列指向構造を完全に継承します。これにより、エンドツーエンドのベクトル化に基づいてクエリパフォーマンスが向上します。行指向ストレージ用の TableScan オペレーターも動的にカラムナチャンクに変換され、統一されたデータ構造に基づいて行指向と列指向のハイブリッドクエリを実装します。
ワンストップウェアハウス (ゼロ ETL)
従来のデータウェアハウスは、ETL を使用してデータを同期し、MPP や Bulk Synchronous Parallel (BSP) などの並列計算アーキテクチャを活用して、複雑な OLAP クエリを処理します。しかし、高同時実行オンラインクエリ (サービングシナリオ) では、これらのウェアハウスはリソースの同時実行性にボトルネックを抱えています。この場合、これらのウェアハウスは OLTP データベースにデータを戻してオンラインクエリを提供します。
PolarDB-X は AnalyticDB for MySQL と統合して、ワンストップウェアハウスを提供します。このウェアハウスは、ゼロ ETL の概念に基づいて共有 CCI データを活用します。また、このウェアハウスは、複数の関係者がデータ集約やデータ相関クエリを実行することを可能にし、AnalyticDB for MySQL のウェアハウジング機能に基づいた従来のウェアハウスおよびデータレイク分析を提供します。PolarDB-X の HTAP 機能を備えた行指向と列指向のハイブリッドアーキテクチャは、オンラインデータの同時クエリにも使用でき、従来のデータ ETL の必要性を排除します。
CCI の仕組み
CCI の構築

CCI は列ストアノードによって構築されます。構築された CCI に関連するデータは、CSV および ORC フォーマットのシャードオブジェクトに保存されます。CSV フォーマットは、リアルタイムの増分データを保存するために使用されます。過剰な増分データはタイムリーにコンパクションされ、ORC フォーマットにダンプされます。PolarDB-X は CSV および ORC フォーマットを最適化しました。最適化されたフォーマットは、ネイティブフォーマットのオープンソース機能を継承し、2 つのフォーマットが MySQL のデータプロトコルを完全に表現できるようにします。
データ同期の観点から、CCI の構築プロセスには、完全スナップショットの読み取りと増分データ同期という 2 つの並列同期トレースが含まれます。CCI が構築されてからデータがインポートされるシナリオでは、増分データのみが同期され、列ストアノードは同時にバイナリログを消費して CCI を構築します。データが部分的にインポートされ、その後 CCI が構築されて残りのデータがインポートされるシナリオでは、増分データが同期され、列ストアノードは既存の増分データと完全データを同時に消費して CCI の作成効率を向上させます。
階層的な観点から、列ストアノードは LSM 構造に似た Delta+Main の 2 層モデルとタグ削除技術を使用して、行指向ストレージと列指向ストレージ間の低遅延データ同期と、秒単位のリアルタイムデータ更新を保証します。データはリアルタイムで MemTable に書き込まれます。データはローカルの CSV ファイルに保存され、グループコミットサイクル内に OSS 上の対応する CSV ファイルに追加されます。ローカルファイルはデルタファイルと名付けられます。OSS 上の CSV ファイルは永続的に保存されるのではなく、コンパクションによって随時 ORC ファイルに変換されます。
MPP
PolarDB-X では、CN がクエリと分析のトラフィックを処理するために使用されます。上の図は、クエリ高速化チェーン全体がオプティマイザー、エグゼキュータ、ストレージエンジンの 3 つのレベルで構成されていることを示しています。
PolarDB-X は、行指向と列指向のハイブリッドシナリオに適したコストオプティマイザーを提供します。コストオプティマイザーは、実行コストに基づいてインテリジェントにルートを識別し、TP クエリを行ストアクエリトレースに、AP クエリを CCI ベースのクエリトレースに転送します。
PolarDB-X は、行指向と列指向のハイブリッドシナリオに適した統合エグゼキュータを提供します。HTAP シナリオでは一連のエグゼキュータが利用可能です。オペレーターレイヤーもベクトル化されており、MPP をサポートしています。複雑なクエリシナリオでは、マルチノードリソースを並列計算に使用して、高スループットの複雑なクエリの要件を満たすことができます。コンピューティングリソースとストレージリソースが分離されたアーキテクチャによって引き起こされるネットワーク遅延を排除するために、エグゼキュータレイヤーはローカルキャッシング技術も導入し、ホットデータをリアルタイムでローカルディスクにロードします。これにより、低遅延のクエリ要件が満たされます。
ストレージエンジンレベルでは、CCI の構築により、コミットされたトランザクションの原子性が保証され、トランザクションレベルで一貫性のあるデータをクエリできるようになります。
サービスタイプ
Columnar の導入により、PolarDB-X はプライマリインスタンスと読み取り専用インスタンスに加えて、追加のサービスタイプを提供します。この追加されたサービスタイプは、読み取り専用列ストアインスタンスとして知られています。
プライマリインスタンス:デフォルトでは、プライマリインスタンスでは行指向データのみをクエリできます。しかし、読み取り専用インスタンスと組み合わせることで、プライマリインスタンスのエンドポイントは、透過的で強力な整合性のある読み書き分離を可能にします。プライマリインスタンスは、列指向データを直接クエリする機能を保持します。インテリジェントなルーティングと行指向と列指向のハイブリッドクエリ機能は将来利用可能になる予定です。
読み取り専用インスタンス:読み取り専用インスタンスでは、行指向の読み取り専用データと CCI データをクエリできます。読み取り専用インスタンスには専用の読み取り専用エンドポイントがあります。アプリケーションは、これらの読み取り専用エンドポイントに個別の接続を確立して、読み取り操作を実行できます。これらの読み取り専用エンドポイントに接続することで、アプリケーションは読み取り操作と書き込み操作を独立して管理できます。
読み取り専用列ストアインスタンス:読み取り専用列ストアインスタンスでは、CCI データのみをクエリできます。インスタンスには専用の読み取り専用エンドポイントがあります。アプリケーションは、これらの読み取り専用エンドポイントに個別の接続を確立して、読み取り操作を実行できます。インスタンスは CN のみで構成されており、よりコスト効率が高いです。
利用シーン
PolarDB-X の CCI 機能は、ワンストップの HTAP ソリューションを提供し、さまざまなビジネスシナリオで使用できます。
リアルタイムレポートビジネスなど、秒単位でのオンラインデータのリアルタイム分析が必要なシナリオ。
PolarDB-X の大容量データストレージ能力に依存して複数の上流データソースを集約し、PolarDB-X を専用のデータウェアハウスとして使用するデータウェアハウジングシナリオ。
PolarDB-X の CCI の強力で柔軟なコンピューティング能力に依存する ETL 向けのコンピューティングシナリオ。
PolarDB-X の CCI 機能は、TP と AP を含むシナリオの要件を満たし、OSS とインテリジェントなルーティング技術に基づいた、透過的でコスト効率の高い HTAP ソリューションを提供します。
パフォーマンステスト
PolarDB-X のクラスター化カラムナインデックス (CCI) に関する PolarDB-X TPC Benchmark-H (TPC-H) テストについては、「クラスター化カラムナインデックスの TPC-H テスト (100 GB)」をご参照ください。