TIDB TIKV 数据是怎么写入与通过Region 分割的?

2021-07-31 00:00:00 数据 分布式 信息 写入 分割


国产的分布式数据库不少,TDSQL, OB,   TIDB ,等等都是比较知名的产品,使用的分布式协议也不同,有使用POSTGRES-XL  ,也有从外观模仿ORACLE 的,还有借鉴各家所长自己研发的。为什么近一直在看TIDB,主要有以下几点


1   TIDB 对比其他的分布式数据库是目前影响力较大的产品

2   TIDB 是基于成型的产品的理论以及底层成熟的存储层研发的数据库产品

3   互联网企业使用的量已经成型,经过验证

4   开放,以及国际上的影响


——————————————————————————————

TIDB 的三个模块,TIDB,  TIKV, PD ,这三个名词估计是耳熟能详了,接入层,事务隔离级别控制层,信息路由层 , 以及信息存储层。TIKV 作为TIDB 的信息存储层, 首先一个信息是如何存储进TIKV



整体的数据写入的过程采用PUT指令,通过PD来对要写入的数据进行路由,对需要写入数据的目的地进行获取,并将获取后的位置发送给TIDB 模块,TIDB 模块将需要写入的数据直接发送给TIKV , TIKV 通过两阶段提交的方式将信息写入 leader region, 并将数据写入的结果反馈给TIDB , 同时数据线性的在follower region中写入。


反向在数据读取的过程过,会根据raft 协议中的大多数的原理,读取的数据必须在大多数的region 中存在,否则是无法进行数据的读取的。


TIKV 的数据存储的单位是REGION ,REGION 对于TIKV是非常重要的,TIKV 通过REGION 以及RAFT 协议将同样的REGION 分布在不同的TIKV 的主机中。随着数据的不断的写入REGION 承载的数据越来越多就需要开始进行分割。TIKV 中存储的数据也是有序的,并且是通过RAGE 的方式(范围的方式进行数据的存储),数据的增大必然导致范围的粒度越来越细分。



初始化时一个REGION为64MB , 并且标注好REGION 数据存储的范围,当数据灌入超过8MB后,TIKV 产生CHECK 线程对REGION 的大小进行定期的巡检, 当数据在REGION 中超过96MB 就产生一个分割的需求了。根据分割的需求,TIKV 中的RAFTSTORE 线程会将需求发送给PD, PD 会根据需求分配新的REGION的ID ,并且将信息会送给TIKV。 


TIKV 获得了新的ID 后根据当前REGION 存储的数据中KEY:VALUE 的情况调整并且重新划分REGION 中的存储数据的范围。由于REGION的拆分仅仅是在元数据上进行范围的重新标定和注册,所以分割本身并不牵扯数据的迁移,速度会比较快。在产生新的REGION 后,并完成注册和分割后,TIKV 会将信息回馈给PD,并进行记录。后续新的数据写入以及提取PD 会根据新的信息进行路由,将信息写入新的REGION。



相关文章