目录
TiFlash架构
TiFlash作为learner,即raft group的第三类角色接入raft Multi;TiFlash不参加TiKV的选举,投票和多数写入
TiFlash主要功能
ps:由于TiFlash承载低并发的OLAP,使HTAP不适用于高并发场景,同时异步复制使HTAP无法保证强一致性
异步复制
一致性读取
T0时刻,写入两条数据分别为(key=1,value=100)和(key=999,value=7)至两个TiKV node上的不同region上;此时,根据TiFlash中raft log的内容,TiFlash同步到idx=95和idx=18的操作
T1时刻,尝试从TiFlash读取key=1和key=999的数据;此时,TiFlash同步到idx=108和idx=20的操作;则T0时刻写入的数据只有(key=1,value=100)同步至TiFlash,而(key=999,value=7)还未同步至TiFlash
T2时刻,写入一条数据(key=1,value=200),此时,TiFlash同步到idx=115和idx=21的操作;
新写入的数据(key=1,value=200)和之前的数据(key=999,value)仍未同步到TiFlash
T3时刻,TiFlash向两个TiKV node(leader)发起进度校验
TiKV node分别放回执行进度为idx=125和idx=31;TiFlash进行异步复制,同步至TiKV的执行进度
TiFlash不同raft group的raft log先后同步至进度校验的进度点,按次序放回T1时刻查询的数据
ps:由于TiFlash也有snapshot机制,所以T1时刻的读取,只能读取至T1时刻之前的写入(如T0时刻)
总结:异步写入,同步读取
智能选择
TiDB Server作为协调者,根据SQL语句的执行代价,决定TiKV和TiFlash的负责的部分
如图中的SQL中,连接条件“product.pid=sales.pid”需要进行TableScan,故下推至TiFlash;而过滤条件“product.batch_id='B1328'”需进行IndexScan,故下推至TiKV
例题
1.下面属于TiFlash核心特性的是?(请选择3项)
A.采用行存+列存的混合存储方式
B.region支持raft投票和选举
C.TiFlash采用异步复制来保证和TiKV一致
D.在TiKV上写入数据成功后,在TiFlash上可以一致性读取
E.CBO基于成本选择在TiFlash或者TiKV上执行SQL
答案:C,D,E
解析:A:TiFlash负责列存,TiKV负责行存;B:TiFlash不参加TiKV的选举,投票
2.关于TiFlash的使用,描述不正确的是?
A.TiFlash不善于处理高并发,QPS一般不应过高
B.SQL语句执行中,要不然数据完全从TiKV中读取,要不然完全从TiFlash中读取
C.MPP中表连接前的过滤和交换完全是在TiFlash节点上完成的
D.在读取TiFlash 中数据的时候,我们需要通过TiKV中的数据确认一致性
答案:B
解析:A:TiFlash承载低并发的OLAP,且QPS<50;B:根据执行代价,SQL语句部分由TiKV执行,部分由TiFlash执行;C:MP在TiFlash上的聚合和连接操作的加速,此前的过滤和数据交互同样在TiFlash执行;D:读取TiFlash中的数据,TiFlash向TiKV发起进度校验