TiFlash の概要

ティフラッシュは、TiDB を本質的に Hybrid Transactional/Analytical Processing (HTAP) データベースにする重要なコンポーネントです。 TiKV の柱状ストレージ拡張機能として、TiFlash は優れた分離レベルと強力な一貫性保証の両方を提供します。

TiFlash では、カラムナー レプリカはRaft Learner コンセンサス アルゴリズムに従って非同期的に複製されます。これらのレプリカが読み取られると、 Raftインデックスとマルチバージョン同時実行制御 (MVCC) を検証することによって、一貫性のスナップショット分離レベルが達成されます。

アーキテクチャ

TiFlash Architecture

上の図は、TiFlash ノードを含む、HTAP 形式の TiDB のアーキテクチャです。

TiFlash は、ClickHouse によって効率的に実装されたコプロセッサのレイヤーを備えた柱状ストレージを提供します。 TiKV と同様に、TiFlash にも Multi-Raft システムがあり、リージョン単位でのデータの複製と配布をサポートしています (詳細はデータストレージを参照)。

TiFlash は、TiKV での書き込みをブロックしない低コストで、TiKV ノード内のデータのリアルタイム レプリケーションを実行します。一方、TiKV と同じ読み取り一貫性を提供し、最新のデータが読み取られるようにします。 TiFlash のリージョンレプリカは、TiKV のリージョン レプリカと論理的に同一であり、TiKV のリーダー レプリカと同時に分割およびマージされます。

TiFlash は TiDB と TiSpark の両方と互換性があるため、これら 2 つのコンピューティング エンジンを自由に選択できます。

ワークロードの分離を確実にするために、TiKV とは異なるノードに TiFlash をデプロイすることをお勧めします。ビジネスの分離が必要ない場合は、TiFlash と TiKV を同じノードに展開することもできます。

現在、データを直接 TiFlash に書き込むことはできません。学習者ロールとして TiDB クラスターに接続するため、TiKV にデータを書き込んでから TiFlash に複製する必要があります。 TiFlash はテーブル単位でのデータ レプリケーションをサポートしますが、デプロイ後のデフォルトではデータはレプリケートされません。指定したテーブルのデータをレプリケートするには、 テーブルの TiFlash レプリカを作成するを参照してください。

TiFlash には、カラムナ ストレージ モジュールtiflash proxypd buddyの 3 つのコンポーネントがあります。 tiflash proxyは、Multi-Raft コンセンサス アルゴリズムを使用した通信を担当します。 pd buddyは PD と連携して、テーブル単位で TiKV から TiFlash にデータを複製します。

TiDB が TiFlash にレプリカを作成する DDL コマンドを受信すると、 pd buddyコンポーネントは、TiDB のステータス ポートを介して、複製するテーブルの情報を取得し、その情報を PD に送信します。次に、PD は、 pd buddyによって提供される情報に従って、対応するデータ スケジューリングを実行します。

主な機能

TiFlash には次の主要な機能があります。

非同期レプリケーション

TiFlash のレプリカは、 Raft Learner という特別な役割として非同期に複製されます。これは、TiFlash ノードがダウンしたり、ネットワークレイテンシーが発生したりした場合でも、TiKV のアプリケーションは正常に続行できることを意味します。

このレプリケーション メカニズムは、自動負荷分散と高可用性という TiKV の 2 つの利点を継承しています。

  • TiFlash は、追加のレプリケーション チャネルに依存しませんが、多対多の方法で TiKV から直接データを受信します。
  • TiKV でデータが失われない限り、いつでも TiFlash でレプリカを復元できます。

一貫性

TiFlash は、TiKV と同じスナップショット分離レベルの一貫性を提供し、最新のデータが読み取られることを保証します。つまり、以前に TiKV に書き込まれたデータを読み取ることができます。このような一貫性は、データ レプリケーションの進行状況を検証することによって達成されます。

TiFlash が読み取りリクエストを受信するたびに、リージョンレプリカは進行状況検証リクエスト (軽量の RPC リクエスト) をリーダー レプリカに送信します。 TiFlash は、現在のレプリケーションの進行状況に読み取り要求のタイムスタンプでカバーされたデータが含まれた後にのみ、読み取り操作を実行します。

賢い選択

TiDB は自動的に TiFlash (列方向) または TiKV (行方向) を使用するか、または 1 つのクエリで両方を使用して最高のパフォーマンスを確保するかを選択できます。

この選択メカニズムは、クエリを実行するために異なるインデックスを選択する TiDB のメカニズムと似ています。 TiDB オプティマイザーは、読み取りコストの統計に基づいて適切な選択を行います。

コンピューティング アクセラレーション

TiFlash は、次の 2 つの方法で TiDB のコンピューティングを高速化します。

  • カラムナ ストレージ エンジンは、読み取り操作の実行においてより効率的です。
  • TiFlash は、TiDB のコンピューティング ワークロードの一部を共有します。

TiFlash は、TiKV コプロセッサと同じ方法でコンピューティング ワークロードを共有します。TiDB は、ストレージレイヤーで完了できるコンピューティングをプッシュ ダウンします。コンピューティングを押し下げることができるかどうかは、TiFlash のサポートに依存します。詳細については、 サポートされているプッシュダウン計算を参照してください。

TiFlash を使用する

TiFlash が展開された後、データの複製は自動的に開始されません。レプリケートするテーブルを手動で指定する必要があります。

TiDB を使用して中規模の分析処理用の TiFlash レプリカを読み取るか、TiSpark を使用して大規模な分析処理用の TiFlash レプリカを読み取ることができます。これは、独自のニーズに基づいています。詳細については、次のセクションを参照してください。

データのインポートから TPC-H データセットでのクエリまでのプロセス全体を体験するには、 TiDB HTAPのクイック スタート ガイドを参照してください。

こちらもご覧ください