天天看点

TiDB架构分析

TiDB有三部分组成:

存储层:TiKV

计算层:TiDB

调度层:PD(PlaceDriver)存储元数据

存储层TiKV

1)通过range分区算法将数据分成一个个region;

2)每个region默认有3个副本,一个leader 副本和两个follower 副本,这些副本分布在不同节点上,通过raft协议保证数据一致性;

3)如果副本数量发生了变化,pd会及时感知,做出应对措施;

计算层TiDB

将SQL请求映射成对TiKV的请求

1)一个表有元数据、行数据、索引数据 三种数据,都是通过底层的kv来存储的;

行数据:key=表id_行id,value=[col1,col2,col3,…]

唯一二级索引:key=表id_索引id_索引值,value=行id

普通二级索引:key=表id_索引id_索引值_行id,value=null

比如现在有一个普通二级索引name,一个SQL

select * from table where name=‘xxx’,这样组成的key=t1_i1_xxx???,但是不知道具体的行id,猜想会将t1_i1_xxx进行编码,前缀相同的都会逻辑存储在一起。

调度层PD

管理元数据