# TiFlash 的主要功能

__*TiFlash 功能*__

+ 异步复制
+ 一致性读取
+ 引擎智能选择
+ 计算加速
-------------------------------------------------------------
TiFlash 主要有异步复制、一致性、引擎智能选择、计算加速等几个核心功能。

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

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

引擎智能选择：TiDB 可以自动选择使用 TiFlash 列存或者 TiKV 行存, 甚至在同一查询内混合使用提供最佳查询性能。这个选择机制与 TiDB 选取不同索引为查询服务类似，CBO 依据统计信息判断读取代价并作出合理的选择。

计算加速：TiFlash 对 TiDB 的计算加速分为两部分: 列存本身的读取效率提升以及为 TiDB 分担计算任务。其中分担计算的原理和 TiKV 的 Coprocessor 一致: TiDB 会将可以由存储层分担的计算下推。能否下推取决于 TiFlash 是否可以支持相关的算子下推。