TiDB学习入门-基本架构
(2019-06-01 10:32:34)
标签:
王显伟tidbtidb是什么tidb是怎么样 |
分类: TiDB |
首先TiDB是国内开源的数据库,属于PingCAP公司,对这家公司有一些基本的了解,感觉公司前景不错,记录一下自己学习的过程
一句说来形容TiDB就是:分布式、强一致、可扩展、并且支持SQL的关系型数据库,借用官方的一张架构图

虽然解决了单节点故障问题,但是这种架构下有一个问题,如果数据量不断的增大,单个节点无法容纳的时候,就引用写的问题,为了解决这个问题,TiDB做了分片,常用的分片方法有hash和range两种类型,虽然hash解决了数据热点问题,但如果要做范围扫描的话,hash需要扫描多个存储节点,显然不合适,因此Tidb选择了range分片

从图上看,引用Region,并且这个Region是自动创建,后续的复制也是基于Region,具体怎么实现呢,继续引用官方的解决方案图,假如有A、B、C、D四个节点,其中A节点存储空间不足,添加节点E,数据自动实现迁移和平衡



关于MVCC TIDB又是如何实现的呢?根据官方法解释是在key的后面添加vesion进行实现,通过PD组件进行分配,每个key的多个版本是共享key的前缀,多而实现在逻辑上和物理上排列在一起,通过verion设置成历史某个时间,可以很容易实现历史某一时间点的查询,这点跟ORACLE闪回查询有点像,但是这个历史时间点能够支持多长时间呢?是不是跟oracle一样,只是支持有限的时间点?
TiDB层是:无状态计算层
PD层是:集群管理,也就是存储的元信息
TiKV层是:分布式键值存储层
对于本地key-vale存储,是基于facebook公司开发的嵌入式存储引擎RocksDB,而RocksDB的主要设计目标是保证存取快速存储器和高负载服务器更高效,保证充分利用Flash或RAM子系统提供的高速率读写,支持高效的查找和范围scan,支持高负载的随机读、高负载的更新操作或两者的结合。其架构应该支持高并发读写和容量大增时系统的一致性。
RocksDB:
优点:
fackbook公司开发的key-value存储引擎
支持快照
自动批量写入
缺点:
没有解决单点失效的问题
TiDB为了解决RocksDB单点失效问题,采用Raft协议做了多副本
Raft协议:
优点:
多个副本写入时,只要超过一半以上写入成功,就认为写入成功
通过leader写入同步到leaner
leader节点并不固定,通过民主选举得到leader节点
支持多副本的添加和删除

虽然解决了单节点故障问题,但是这种架构下有一个问题,如果数据量不断的增大,单个节点无法容纳的时候,就引用写的问题,为了解决这个问题,TiDB做了分片,常用的分片方法有hash和range两种类型,虽然hash解决了数据热点问题,但如果要做范围扫描的话,hash需要扫描多个存储节点,显然不合适,因此Tidb选择了range分片

从图上看,引用Region,并且这个Region是自动创建,后续的复制也是基于Region,具体怎么实现呢,继续引用官方的解决方案图,假如有A、B、C、D四个节点,其中A节点存储空间不足,添加节点E,数据自动实现迁移和平衡



关于MVCC TIDB又是如何实现的呢?根据官方法解释是在key的后面添加vesion进行实现,通过PD组件进行分配,每个key的多个版本是共享key的前缀,多而实现在逻辑上和物理上排列在一起,通过verion设置成历史某个时间,可以很容易实现历史某一时间点的查询,这点跟ORACLE闪回查询有点像,但是这个历史时间点能够支持多长时间呢?是不是跟oracle一样,只是支持有限的时间点?
事务模型:
采用Google
Percolator模型,主要的优点是乐观事务模型,这点区别于oracle和mysql的悲观事务模型,其实际是提示的时候检测冲突,隔离级别采用的是Snapshot
Isolcation
整个TiKV架构如下:
关于SQL Layer层的实现
底层是key-value模型,为了支持SQL,必须实现关系表到key-value的应射,支持全局索引以及并行查询、函数、以及大数据的分析,下图是TiDB的整个存储结构图
前一篇:Oracle归档日志暴增原因排查
后一篇:TiDB学习入门-相关工具