# TiFlash 的架构

![`smart`](TiFlashArchitecture_aa_002_20220516.png)
-------------------------------------------------------------
TiFlash 是 TiDB HTAP 形态的关键组件, 它是 TiKV 的列存扩展, 在提供了良好的隔离性的同时, 也兼顾了强一致性。列存副本通过 Raft Learner 协议异步复制, 但是在读取的时候通过 Raft 校对索引配合 MVCC 的方式获得 Snapshot Isolation 的一致性隔离级别。这个架构很好地解决了 HTAP 场景的隔离性以及列存同步的问题。

TiFlash 提供列式存储, 且拥有高效的 Coprocessor。除此以外, 它与 TiKV 非常类似, 依赖同样的 Multi-Raft 体系, 以 Region 为单位进行数据复制和分散。

TiFlash 以低消耗不阻塞 TiKV 写入的方式, 实时复制 TiKV 集群中的数据, 并同时提供与 TiKV 一样的一致性读取, 且可以保证读取到最新的数据。TiFlash 中的 Region 副本与 TiKV 中完全对应, 且会跟随 TiKV 中的 Leader 副本同时进行分裂与合并。

TiFlash 推荐使用和 TiKV 不同的节点以做到工作负载的隔离, 但在无业务隔离的前提下, 也可以选择与 TiKV 同节点部署。

TiFlash 无法直接接受数据写入, 任何数据必须先写入 TiKV 再同步到 TiFlash。TiFlash 以 Raft Learner 角色接入 TiDB 集群, TiFlash 支持表粒度的数据同步, 部署后默认情况下不会同步任何数据。

以下内容作为一个小结:
1. TiFlash 无法承受高并发, 一般 QPS 不能高于 50。
2. TiFlash 的 Region 与 TiKV 完全一致, 分区一致。
3. TiFlash 适合于必须将整个表或者表中大部分数据取出读取的场景。
4. TiFlash 协助提升查询性能的点在于列存、聚合操作与 Join 操作。
