TiFlashの概要
TiFlashは、TiDBを本質的にハイブリッドトランザクション/分析処理(HTAP)データベースにする主要コンポーネントです。TiKVの列指向storage拡張であるTiFlashは、優れた分離レベルと強力な一貫性保証の両方を提供します。
TiFlashでは、列指向レプリカはRaft Learnerコンセンサスアルゴリズムに従って非同期的に複製されます。これらのレプリカが読み込まれると、 Raftインデックスと多版型同時実行制御(MVCC)の検証によって、スナップショット分離レベルの一貫性が実現されます。
アーキテクチャ

上の図は、 TiFlashノードを含む HTAP 形式の TiDB のアーキテクチャです。
TiFlashは、ClickHouseによって効率的に実装されたコプロセッサレイヤーを備えた列指向storageを提供します。TiKVと同様に、 TiFlashにもMulti-Raftシステムが搭載されており、リージョン単位でのデータの複製と分散をサポートします(詳細はデータストレージ参照)。
TiFlashは、 TiKVノード内のデータのリアルタイムレプリケーションを低コストで実行します。これにより、TiKVへの書き込みがブロックされることはありません。同時に、TiKVと同様の読み取り一貫性を提供し、最新のデータが読み取られることを保証します。TiFlashのリージョンレプリカはTiKVのレプリカと論理的に同一であり、TiKVのLeaderレプリカと同時に分割・統合されます。
Linux AMD64アーキテクチャでTiFlash を展開するには、CPU が AVX2 命令セットをサポートしている必要があります。1 grep avx2 /proc/cpuinfo出力が生成されることを確認して確認してください。Linux ARM64アーキテクチャの場合、CPU が ARMv8 命令セットアーキテクチャをサポートしている必要があります。3 grep 'crc32' /proc/cpuinfo | grep 'asimd'出力が生成されることを確認して確認してください。これらの命令セット拡張を使用することで、TiFlash のベクトル化エンジンはより優れたパフォーマンスを発揮できます。
TiFlashはTiDBと互換性があります。TiDBをTiFlashの計算エンジンとして使用できます。
ワークロードの分離を確保するため、 TiFlash をTiKV とは別のノードにデプロイすることをお勧めします。業務上の分離が不要な場合は、 TiFlashと TiKV を同じノードにデプロイすることも可能です。
現在、 TiFlashに直接データを書き込むことはできません。TiKV は TiDB クラスターにLearnerロールとして接続するため、 TiFlashにデータを書き込み、それを複製する必要があります。TiFlashはテーブル単位でのデータ複製をサポートしていますが、デプロイ後、デフォルトではデータは複製されません。指定したテーブルのデータを複製するには、 テーブルのTiFlashレプリカを作成する参照してください。
TiFlashは、列指向storageコンポーネントとTiFlashプロキシコンポーネントという2つの主要コンポーネントで構成されています。TiFlashTiFlashコンポーネントは、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レプリカを読み取ることができます。詳細については、以下のセクションをご覧ください。
TPC-H データセットでのデータのインポートからクエリまでのプロセス全体を体験するには、 TiDB HTAPのクイックスタートを参照してください。
参照
- TiFlashノードを含む新しいクラスターを展開するには、 TiUPを使用して TiDBクラスタをデプロイ参照してください。
- デプロイされたクラスターにTiFlashノードを追加するには、 TiFlashクラスターのスケールアウト参照してください。
- TiFlashクラスターを管理 。
- TiFlashのパフォーマンスを調整する 。
- TiFlashの設定 。
- TiFlashクラスターを監視する 。
- TiFlashアラートルール学びます。
- TiFlashクラスターのトラブルシューティング 。
- TiFlashでプッシュダウン計算をサポート
- TiFlashでのデータ検証
- TiFlashの互換性