一.TiFlash的主要架构
![](https://i-blog.csdnimg.cn/direct/4f3042597ecd4ee0ba81354191158262.png)
二.TiFlash 主要功能
1.异步复制
![](https://i-blog.csdnimg.cn/direct/1352f7ab0aa04b26b9a5527e78f3e4d1.png)
2.一致性读取
T0 时刻从客户端写入两行数据
k=1 value=100
k=999 value=7
分别写入到了两个region,并且产生raft log
此时TiFlash还没有TiKV的这两行数据
![](https://i-blog.csdnimg.cn/direct/caf53382035d4f84bb80cd0ab2d0072f.png)
此时TiFlash同步了key=1 value=100的数据
还没有同步 key=999 value=7的数据
读取TiFlash中的key=1和key=999
又进行了一次写入 key=1 value=200
此时raftlog idx=122
![](https://i-blog.csdnimg.cn/direct/ac541290fef7441588bf76deaeff39ce.png)
确认TIKV的raft log idx号
并且记录在TiFlash
此时,idx=31 从TIKV记录的日志
已经达到了
再读取key=999 value7 一定可以读到了
但 idx=125还没有达到, key=1 value=100 还不可以读
![](https://i-blog.csdnimg.cn/direct/2e51a99369f94c40909f761e79df08ff.png)
此时读key=1发现有两个版本
T1时刻发出的读取,只能看到T1时刻之前完成的
所以只能读到T0时候的数据
这样key=1 value=100就返回给了客户端
3.智能选择
之前有总结过,TiDB会根据sql的情况智能的选择 读取TIKV还是TiFlash
例如:下面两张表做关联查询,再product.pid上有索引,可能会走TIKV,但AVG可能设计OLAP业务,如果没有索引,做全表扫描也可能走TiFlash。
![](https://i-blog.csdnimg.cn/direct/4f5c2d30e3154d9f861c9892a5da8107.png)