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

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

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

查看所有标签

猜你喜欢:

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

性能之巅

性能之巅

Brendan Gregg / 徐章宁、吴寒思、陈磊 / 电子工业出版社 / 2015-8-15 / 128

《性能之巅:洞悉系统、企业与云计算》基于Linux 和Solaris 系统阐述了适用于所有系统的性能理论和方法,Brendan Gregg 将业界普遍承认的性能方法、工具和指标收集于本书之中。阅读本书,你能洞悉系统运作的方式,学习到分析和提高系统与应用程序性能的方法,这些性能方法同样适用于大型企业与云计算这类最为复杂的环境的性能分析与调优。一起来看看 《性能之巅》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具