# TiFlash

__*TiFlash 功能*__

+ 异步复制
+ 一致性
+ 列式存储提高分析查询效率
+ 业务隔离
+ 智能选择

![`smart`](./student-guide/diagram/TiFlash_aa_001_20220506.png)
-------------------------------------------------------------
在接下来的课程中我们将会详细为大家介绍 TiFlash 的主要功能以及实现原理,这里我们先简要了解下它的主要功能。

1. 异步复制
TiFlash 中的副本以特殊角色 (`Raft Learner`) 进行异步的数据复制。这表示当 TiFlash 节点宕机或者网络高延迟等状况发生时,TiKV 的业务仍然能确保正常进行。
这套复制机制也继承了 TiKV 体系的自动负载均衡和高可用:并不用依赖附加的复制管道,而是直接以多对多方式接收 TiKV 的数据传输；且只要 TiKV 中数据不丢失,就可以随时恢复 TiFlash 的副本。

2. 一致性
TiFlash 提供与 TiKV 一样的快照隔离支持,且保证读取数据最新（确保之前写入的数据能被读取）。这个一致性是通过对数据进行复制进度校验做到的。
每次收到读取请求,TiFlash 中的 `Region` 副本会向 `Leader` 副本发起进度校对（一个非常轻的 RPC 请求）,只有当进度确保至少包含读取请求时间戳所覆盖的数据之后才响应读取。

3. 列式存储提高分析查询效率
TiFlash 不同于 TiKV,采用了列式存储的数据结构,也可以说 TiFlash 是 TiKV 的列存版本,众所周知,列存对于统计分析查询非常友好,行存对于事务型业务友好,所以我们就可以将统计分析查询这类需要暴力扫描的业务放在 TiFlash 上来提高效率,再加 `MPP (Massively Parallel Processing)`功能架构的引入,将计算任务并行地分散到多个服务器节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果,使得在 TiFlash 上的分析查询业务更加高效。

4. 业务隔离
由于之前提到的,列存对于统计分析查询 (OLAP) 非常友好,行存对于事务型业务 (OLTP) 友好,所以,TiKV 和 TiFlash 分别可以用于 OLTP 和 OLAP 两种业务场景。这样两种业务就被隔离开来,互相不会干扰。

5. 智能选择
无论是 TiKV 还是 TiFlash,它们的 SQL 入口都是 TiDB Server,TiDB Server 中的优化器模型可以根据 SQL 语句的特点智能选择从 TiKV 行存还是 TiFlash 列存中去读取数据。