TiFlashの概要

TiFlash 、TiDBを本質的にハイブリッドトランザクション/分析処理(HTAP)データベースにする主要コンポーネントです。TiKVの列指向storage拡張であるTiFlashは、優れた分離レベルと強力な一貫性保証の両方を提供します。

TiFlashでは、列指向レプリカはRaft Learnerコンセンサスアルゴリズムに従って非同期的に複製されます。これらのレプリカが読み込まれると、 Raftインデックスと多版型同時実行制御(MVCC)の検証によって、スナップショット分離レベルの一貫性が実現されます。

アーキテクチャ

TiFlash Architecture

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

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

TiFlashは、TiKVノード内のデータのリアルタイムレプリケーションを低コストで実行します。これにより、TiKVへの書き込みがブロックされることはありません。同時に、 TiFlashと同様の読み取り一貫性を提供し、最新のデータが読み取られることを保証します。TiFlashのリージョンレプリカはTiKVのレプリカと論理的に同一であり、TiKVのLeaderレプリカと同時に分割・統合されます。

Linux AMD64アーキテクチャでTiFlashを展開するには、CPUがAVX2命令セットをサポートしている必要がありますcat /proc/cpuinfo | grep avx2出力されていることを確認してください。Linux ARM64アーキテクチャでTiFlashを展開するには、CPUがARMv8命令セットアーキテクチャをサポートしている必要があります。3 cat /proc/cpuinfo | grep 'crc32' | grep 'asimd'出力されていることを確認してください。命令セット拡張を使用することで、TiFlashのベクトル化エンジンはより優れたパフォーマンスを発揮できます。

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

ワークロードの分離を確保するため、 TiFlash をTiKV とは別のノードにデプロイすることをお勧めします。業務上の分離が不要な場合は、 TiFlashと TiKV を同じノードにデプロイすることも可能です。

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

TiFlashは、列指向storageコンポーネントとTiFlashプロキシコンポーネントという2つの主要コンポーネントで構成されています。TiFlashプロキシコンポーネントは、Multi-Raftコンセンサスアルゴリズムを用いた通信を担当します。

TiFlash内のテーブルのレプリカを作成するための DDL コマンドを受信すると、TiDB は PD 内に対応する配置ルール自動的に作成し、その後 PD はこれらのルールに基づいて対応するデータ スケジューリングを実行します。

主な特徴

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

非同期レプリケーション

TiFlash内のレプリカは、特別な役割であるRaft Learnerとして非同期的に複製されます。つまり、 TiFlashノードがダウンしたり、ネットワークのレイテンシーが大きくなったりしても、TiKV内のアプリケーションは正常に動作し続けることができます。

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

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

一貫性

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

TiFlash が読み取り要求を受信するたびに、リージョンレプリカはLeaderレプリカに進行状況検証要求(軽量 RPC 要求)を送信します。TiFlashは、読み取り要求のタイムスタンプに含まれるデータが現在のレプリケーション進行状況に含まれるようになった場合にのみ、読み取り操作を実行します。

賢い選択

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

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

コンピューティングの加速

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

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

TiFlashは、TiKVコプロセッサーと同様に、コンピューティングワークロードを分散します。TiDBは、storageレイヤーで完了可能なコンピューティングをプッシュダウンします。コンピューティングをプッシュダウンできるかどうかは、 TiFlashのサポート状況によって異なります。詳細については、 サポートされているプッシュダウン計算参照してください。

TiFlashを使用する

TiFlashを導入しても、データのレプリケーションは自動的に開始されません。レプリケーションするテーブルを手動で指定する必要があります。

中規模の分析処理ではTiDBを使用してTiFlashレプリカを読み取るか、大規模な分析処理ではTiSparkを使用してTiFlashレプリカを読み取るか、お客様のニーズに合わせて選択できます。詳細については、以下のセクションをご覧ください。

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

参照

このページは役に立ちましたか?