TiDB是如何新建一张表的?
顶
原
荐
字数 623
阅读 28
收藏 0
TiDB是一个开源分布式数据库,并使用Rust编写的TiKV存储数据,其中TiDB是一个 SQL 语法解析层,本文使用MockDB模拟本地存储数据,从语法解析到实际存储操作进行分析一张数据表是如何建出来的。
过程如下:
- 首先我们得有一个建表语句
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
- TiDB拿到一个SQL语句之后,首先需要使用Parser进行语法解析 上图中的代码为Parser的goyacc语法,最终SQL在Parser中走了一圈之后生成CreateTableStmt的结构,该结构具体的属性如下图所示:
- 在语法解析完成之后,就需要生一个抽象语法树AST,TiDB使用火山模型向下钻取生成语法树。 !
- 如果语法树生成的没有问题,接下来就要build一个LogicPlan,当然在build之前我们先进行一些预检查: 预检查主要包括一些表名合法性检查,列名合法性检查,约束检查,主键检查等。
- 在确保AST检查无误之后,我们开始处理步骤3中生成的AST语法树。其中在ddl_api.go中我们再做更详细的检查,并最终生成一个TableInfo的结构,这个结构中保存了所有表相关的信息。并提交一个类型为
Type: model.ActionCreateTable
的Job。 - 在ddl_worker.go接收到步骤5中的Job之后真正开始作为一个原子操作处理保存TableInfo的任务。其中
t.CreateTable(schemaID, tbInfo)
将会真正调用Hash接口的API将TableInfo
序列化之后存入后端存储中。 在存储完成之后调用job.FinishTableJob
通过前端建表语句已经执行完成。
总结:目前看起来TiDB的代码结构相当清晰,由于并未使用任何 MySQL 客户端的 C语言 代码,所以代码也相当整洁,稍微花一些时间就能够了解到他是如何实现相关数据库操作的。
© 著作权归作者所有
共有人打赏支持
上一篇: 网络报文解析初探
下一篇: MySQL高可用架构对比分析
相关文章 最新文章
作者:肖亮亮 Table Partition 什么是 Table Partition Table Partition 是指根据一定规则,将数据库中的一张表分解成多个更小的容易管理的部分。从逻辑上看只有一张表,但是底层却是由多个物...
TiDB
10/29
0
0
爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...
TiDB
09/22
0
0
背景 随着业务增长,公司数据规模不断膨胀,表变多、变大。一方面占用的磁盘、CPU 等物理资源疾速上涨,另一方面大表性能下降且变更困难。实际上,很多大表的数据无需保留很久,比如某些业务...
TiDB
04/26
0
0
作者:孙玄,转转公司首席架构师;陈东,转转公司资深工程师;冀浩东,转转公司资深 DBA。 公司及业务架构介绍 转转二手交易网 —— 把家里不用的东西卖了变成钱,一个帮你赚钱的网站。由腾讯...
TiDB
05/30
0
0
本文内容是马上消费金融DBA团队使用tidb遇到的问题汇总.李银龙主负责整理. 问题一: tidb与mk-table-checksum不兼容 描述: 在gh-ost与syncer兼容性测试时,做一致性校验时,发现tidb与mk-tabl...
梧桐0928
08/14
0
0
没有更多内容
加载失败,请刷新页面
加载更多摘要: python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql 。由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需要先安装 FreeTDS。 python 连接数...
阿里云官方博客
30分钟前
3
0
之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》)的源码,本次就来分析下SpringMVC。本文先简述下目前S...
公众号_Zack说码
32分钟前
6
0
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由forrestlin发表于云+社区专栏 导语:转置卷积层(Transpose Convolution Layer)又称反卷积层或分数卷积层,在最近提出的卷...
腾讯云加社区
41分钟前
3
0
import java.time.LocalDate;import java.time.Month;import java.time.temporal.TemporalAdjusters;public final class LocalDateUtils {private LocalDateUtils() {thro......
laolin23
46分钟前
2
0
没有更多内容
加载失败,请刷新页面
加载更多以上所述就是小编给大家介绍的《TiDB是如何新建一张表的? 原 荐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- idea新建springboot项目
- kubelet 源码分析:pod 新建流程
- Linux VG扩展新增硬盘并新建文件系统
- 合并本地脚手架工程与github新建工程
- mysql迁移之新建用户、备份还原数据库
- FireFox 在新建标签页插入“片段”广告引社区争议
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。