TIDB 初级课程体验 2 (分布式数据库引擎)
TIDB 在TIKV 中的数据逻辑表的呈现是一个需要学习的地方, TIKV中行的信息是通过key value 来组成的, 而在逻辑和物理之间进行实现的过程中tidb做了如下的工作。
1 存储的表必须有主键,通过主键也就是ROW_ID 来实现一个表的逻辑有序性,通过逻辑有序性来实现查找,这与其他的数据库查找的方式类似,而数据的存储中是需要有逻辑映射的关系,与位移的处理。
通过主键找到数据本身对应的物理地址,然后通过元数据中存储的schema+位移的方式来满足数据的查找和提取,每行数据的列数据都是通过位移的方式查找和提取的。
对于范围的查询,可以从主键的位置来进行划定范围,在直接提取即可。
而TIKV中的INDEX的概念与传统的数据库有差异, TIKV中的INDEX存储的是行位置索引列的顺序化信息和行的物理信息,通过对信息进行扫描得到物理行的信息,在二次到原表中提取信息。(而传统的表的INDEX是可以带我们的数据信息,这里TIKV没有带相关的信息,这不是缺点,个人认为这与他分布式存储的方式和LSM TREE存储的方式有关)
SQL 引擎么有什么好说的,主要就是SQL 的解析器, SQL文本格式化,SQL逻辑PLAN 生成, SQL 执行计划优化器,通过COST模型来和统计信息来分析出在快时间内可以接受的优结果。
普通的数据库的执行结果的过滤,主要通过将收集的数据库上报给上层的SERVER 层,将这些信息在过滤获得结果, 而分布式的优势就是数据分片和并行计算的能力,这里TIKV通过各个节点的预计算的模块,对数据预先在自己的节点进行计算,计算后,在将这些结果统一传送到 TIDB 层,进行SUM 后获得结果,这样的方式大大提高了并行计算的能力.
(顺便说一句,个人看法则TIKV的数据存储层的机器的性能都应该是均衡的,而不应该是有好有差, 终结果是导致你计算的速度按照木桶原理中差的那个的时间来标定)
关于TIDB HASH JOIN 比MYSQL要快的很多的原因是并行,分开计算在汇总的方式,(分布式并行大法好)
上面是TIDB 的另一个有点,DDL 无阻塞,这个方式主要得益于 KEY VALUE的存储方式, 也就是我们在操作DDL 更改字段的时候, 只需要在schema 添加相关的变动,而实际的数据行并未变动, 新的数据会根据SCHEMA的变动进行写入和操作, 旧的数据行则通过在操作的时候,在改变的方式,将DDL 在传统数据库中的问题彻底化解了. 同时对于多版本的信息,也根据GOOGLE的spanner的理论,设置了三个状态 PUBLIC , WRITE_ONLY, DELETE_ONLY 来完成了分片数据的多版本控制和终统一的实现.
TIDB SERVER 层的功能如上图
相关文章