青春须早为,岂能长少年。这篇文章主要讲述TIDB 初级课程体验 2 (分布式数据库引擎)相关的知识,希望能为你提供帮助。
TIDB 在TIKV 中的数据逻辑表的呈现是一个需要学习的地方, TIKV中行的信息是通过key value 来组成的, 而在逻辑和物理之间进行实现的过程中tidb做了如下的工作。
1
存储的表必须有主键,通过主键也就是ROW_ID 来实现一个表的逻辑有序性,通过逻辑有序性来实现查找,这与其他的数据库查找的方式类似,而数据的存储中是需要有逻辑映射的关系,与位移的处理。
通过主键找到数据本身对应的物理地址,然后通过元数据中存储的schema+位移的方式来满足数据的查找和提取,每行数据的列数据都是通过位移的方式查找和提取的。
【TIDB 初级课程体验 2 (分布式数据库引擎)】对于范围的查询,可以从主键的位置来进行划定范围,在直接提取即可。
而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
层的功能如上图
推荐阅读
- K8S-数据持久化PVPVCStorageClass的关系
- PostgreSQLPG序列 与 序列是否可以绑定到多个表的疑问
- MYSQL连接数被篡改到底为那般
- JSP|【三剑客+JSP+Mysql+Tomcat】从前到后搭建简易编程导航小网站(期末作业)
- 数据库|MySQL 暴跌!
- 数据结构|BigDecimal使用不当,造成P0事故!
- 《永远不要在 Linux 执行的 10 个最危险的命令》
- CommandLinux 关机重启命令
- 块设备驱动程序