首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TiDB是如何新建一张表的?

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

过程如下:

首先我们得有一个建表语句

TiDB拿到一个SQL语句之后,首先需要使用Parser进行语法解析

上图中的代码为Parser的goyacc语法,最终SQL在Parser中走了一圈之后生成CreateTableStmt的结构,该结构具体的属性如下图所示:

在语法解析完成之后,就需要生一个抽象语法树AST,TiDB使用火山模型向下钻取生成语法树。

!

如果语法树生成的没有问题,接下来就要build一个LogicPlan,当然在build之前我们先进行一些预检查:

预检查主要包括一些表名合法性检查,列名合法性检查,约束检查,主键检查等。

在确保AST检查无误之后,我们开始处理步骤3中生成的AST语法树。其中在ddl_api.go中我们再做更详细的检查,并最终生成一个TableInfo的结构,这个结构中保存了所有表相关的信息。并提交一个类型为的Job。

在ddl_worker.go接收到步骤5中的Job之后真正开始作为一个原子操作处理保存TableInfo的任务。其中将会真正调用Hash接口的API将序列化之后存入后端存储中。

在存储完成之后调用通过前端建表语句已经执行完成。

总结:

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181126G0KQ2I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券