TiDB是如何新建一张表的? 原 荐

栏目: 数据库 · 发布时间: 6年前

TiDB是如何新建一张表的? 原 荐

TiDB是如何新建一张表的?

  OnlyBlog 发布于 今天 10:52

字数 623

阅读 28

收藏 0

TiDB

开发十年,就只剩下这套架构体系了! >>> TiDB是如何新建一张表的? 原 荐

TiDB是一个开源分布式数据库,并使用Rust编写的TiKV存储数据,其中TiDB是一个 SQL 语法解析层,本文使用MockDB模拟本地存储数据,从语法解析到实际存储操作进行分析一张数据表是如何建出来的。

过程如下:

  1. 首先我们得有一个建表语句
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)
)
  1. TiDB拿到一个SQL语句之后,首先需要使用Parser进行语法解析 TiDB是如何新建一张表的? 原 荐 上图中的代码为Parser的goyacc语法,最终SQL在Parser中走了一圈之后生成CreateTableStmt的结构,该结构具体的属性如下图所示:
    TiDB是如何新建一张表的? 原 荐
  2. 在语法解析完成之后,就需要生一个抽象语法树AST,TiDB使用火山模型向下钻取生成语法树。 TiDB是如何新建一张表的? 原 荐 !
  3. 如果语法树生成的没有问题,接下来就要build一个LogicPlan,当然在build之前我们先进行一些预检查: TiDB是如何新建一张表的? 原 荐 预检查主要包括一些表名合法性检查,列名合法性检查,约束检查,主键检查等。
  4. 在确保AST检查无误之后,我们开始处理步骤3中生成的AST语法树。其中在ddl_api.go中我们再做更详细的检查,并最终生成一个TableInfo的结构,这个结构中保存了所有表相关的信息。并提交一个类型为 Type: model.ActionCreateTable 的Job。
  5. 在ddl_worker.go接收到步骤5中的Job之后真正开始作为一个原子操作处理保存TableInfo的任务。其中 t.CreateTable(schemaID, tbInfo) 将会真正调用Hash接口的API将 TableInfo 序列化之后存入后端存储中。 TiDB是如何新建一张表的? 原 荐 在存储完成之后调用 job.FinishTableJob 通过前端建表语句已经执行完成。

总结:目前看起来TiDB的代码结构相当清晰,由于并未使用任何 MySQL 客户端的 C语言 代码,所以代码也相当整洁,稍微花一些时间就能够了解到他是如何实现相关数据库操作的。

TiDB是如何新建一张表的? 原 荐

© 著作权归作者所有

共有人打赏支持

上一篇: 网络报文解析初探

下一篇: MySQL高可用架构对比分析

TiDB是如何新建一张表的? 原 荐

OnlyBlog

粉丝 1

博文 4

码字总数 2792

作品 0

深圳

数据库管理员

提问

相关文章 最新文章

TiDB 源码阅读系列文章(二十)Table Partition

作者:肖亮亮 Table Partition 什么是 Table Partition Table Partition 是指根据一定规则,将数据库中的一张表分解成多个更小的容易管理的部分。从逻辑上看只有一张表,但是底层却是由多个物...

TiDB

10/29

0

0

TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB

09/22

0

0

TiDB 在饿了么归档环境的应用

背景 随着业务增长,公司数据规模不断膨胀,表变多、变大。一方面占用的磁盘、CPU 等物理资源疾速上涨,另一方面大表性能下降且变更困难。实际上,很多大表的数据无需保留很久,比如某些业务...

TiDB

04/26

0

0

TiDB 分布式数据库在转转公司的应用实践

作者:孙玄,转转公司首席架构师;陈东,转转公司资深工程师;冀浩东,转转公司资深 DBA。 公司及业务架构介绍 转转二手交易网 —— 把家里不用的东西卖了变成钱,一个帮你赚钱的网站。由腾讯...

TiDB

05/30

0

0

tidb使用过程中遇到问题汇总

本文内容是马上消费金融DBA团队使用tidb遇到的问题汇总.李银龙主负责整理. 问题一: tidb与mk-table-checksum不兼容 描述: 在gh-ost与syncer兼容性测试时,做一致性校验时,发现tidb与mk-tabl...

梧桐0928

08/14

0

0

没有更多内容

加载失败,请刷新页面

加载更多
函数计算 Python 连接 SQL Server 小结

摘要: python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql 。由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需要先安装 FreeTDS。 python 连接数...

阿里云官方博客

30分钟前

3

0

根据ip查询地址

http://ip.taobao.com/service/getIpInfo.php?ip=

qiang123

32分钟前

1

0

“过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码

之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》)的源码,本次就来分析下SpringMVC。本文先简述下目前S...

公众号_Zack说码

32分钟前

6

0

TiDB是如何新建一张表的? 原 荐
由浅入深:CNN中卷积层与转置卷积层的关系

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由forrestlin发表于云+社区专栏 导语:转置卷积层(Transpose Convolution Layer)又称反卷积层或分数卷积层,在最近提出的卷...

腾讯云加社区

41分钟前

3

0

TiDB是如何新建一张表的? 原 荐
Java 日期 LocalDate

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是如何新建一张表的? 原 荐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

若为自由故

若为自由故

[美] Sam Williams / 邓楠、李凡希 / 人民邮电出版社 / 2015-4 / 49

理查德·马修·斯托曼(Richard Matthew Stallman,简称RMS)是自由软件之父,他是自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者。作为一个著名的黑客,他的主要成就包括Emacs及后来的GNU Emacs、GNU C 编译器及GDB 调试器。他编写的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。......一起来看看 《若为自由故》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试