# TiFlash のアーキテクチャ

![`smart`](TiFlashArchitecture_aa_002_20220516.png)
-------------------------------------------------------------
TiFlashはTiDB HTAP能力の主要なコンポーネントであり、TiKVのカラム拡張であります。それは強い一貫性を考慮しながら良い分離を提供します。カラムレプリカはRaft Learnerプロトコルを介して非同期的にレプリケートされますが、読み取り時にはRaft検証インデックスとMVCCを組み合わせてSnapshot Isolation一貫性分離レベルを得ます。このアーキテクチャはHTAPシナリオにおける分離とカラムの同期の問題を非常にうまく解決します。

TiFlashは列指向ストレージを提供し、効率的なコプロセッサーを持っています。また、TiKVと非常によく似ており、同じMulti-Raftシステムを利用し、Region単位でデータを複製・配布しています。

TiFlashは、書き込みのための軽量で非ブロッキングな方法でTiKVクラスタのデータを複製し、TiKVと同様に一貫した読み取りを提供します。すなわち、TiFlashは最新のデータを読み取ることを保証できます。TiFlashのRegionレプリカは、TiKVのものと完全に対応し、TiKVのLeaderレプリカと同時に分割およびマージされます。

TiFlashは、ワークロードの分離を実現するために、TiKVとは異なるノードを使用することを推奨します。しかし、ビジネスの分離が必要ない場合は、TiFlashをTiKVと同じノードにデプロイすることも可能です。

TiFlashはTiKV以外からの直接データ書き込みを受け付けることができず、すべてのデータはまずTiKVに書き込まれてからTiFlashに同期されなければなりません。TiFlashはRaft Learnerの役割としてTiDBクラスタに参加し、TiFlashはテーブルレベルのデータ同期をサポートしています。

TiFlashレプリケーション機能はデフォルトでオフになっているので、手動で有効にする必要があります。

以下が要約です：
1. TiFlashは高い並行性を処理できません。一般的にQPSは50を超えることはできません。
2. TiFlash のリージョンは TiKV と完全に一致しており、パーティションも一致しています。
3. TiFlashは、テーブル全体またはテーブル内のほとんどのデータを取得して読み取る必要があるシナリオに適しています。
4. TiFlashがクエリーパフォーマンスを改善するポイントは、カラムストレージ、集計操作、およびジョイン操作にあります。