# TiFlash服务器
+ 异步复制
+ 一致性
+ 列存储提高了分析查询效率
+ 事务和分析处理工作负载隔离
+ 引擎智能选择

![`smart`](TiFlash_aa_001_20220506.png)

--------------------------------------------------------------
TiFlash 集群的重要特性包括以下内容：

异步复制
- TiFlash 的复制通过 Raft Learner 实现异步数据复制。这意味着，即使 TiFlash 节点宕机或网络出现高延迟，TiKV 仍能确保正常运行。此复制机制也继承了 TiKV 系统的自动负载均衡和高可用性：它不依赖额外的复制管道，而是以多对多的方式直接接收 TiKV 的数据传输；只要 TiKV 中的数据不丢失，TiFlash 的副本随时可以恢复。

一致性
- TiFlash提供与TiKV相同的快照隔离支持，并确保读取的数据是最新的。这种一致性是通过验证数据的复制进度来实现的。每次收到读取请求时，TiFlash中的Region副本会向Leader副本发起进度检查（一个非常轻量级的RPC请求），只有有效的数据才能满足读取请求。

列存储提高了分析查询效率。
- TiKV与TiFlash不同，TiFlash使用列存储数据结构。列存储对统计分析查询非常友好，而行存储对事务业务友好，因此我们可以将需要全表扫描的统计分析查询和其他服务放在TiFlash上以提高效率，再加上MPP（Massively Parallel Processing）架构的引入，将计算任务分发到多个服务器节点进行并行处理，在每个节点完成计算后，将各部分的结果汇总在一起得到最终结果，使TiFlash上的分析查询服务更加高效。

工作负荷隔离
- 正如前面提到的，列存储非常友好地支持统计分析查询（OLAP），而行存储则友好地支持事务（OLTP），因此TiKV集群和TiFlash集群可以分别用于两种工作负载场景，OLTP和OLAP。这样，两种工作负载就被隔离开来，不会相互干扰。

引擎智能选择
- 无论是TiKV还是TiFlash，它们的SQL根节点都是TiDB服务器。TiDB服务器中的优化器可以根据SQL语句的特征动态决定是从TiKV行存储中读取数据还是从TiFlash列存储中读取数据。