GreatSQL社区

搜索

DB架构师:曾凡坤

不会C/C++的不是好DBA

DB架构师:曾凡坤 已有 51 次阅读2025-1-12 01:14 |个人分类:GCC编程|系统分类:运维实战| MySQL

一个解析MYBAITS的脚本..

不会C/C++的不是好DBA! 这可不是标题蛋. 数据库作为信息社会的基石,且是核心基石.它需要面对高并发的SQL请求,要处理大量数据的请求,且要运行稳定的三要素. 说白了就是要快,要多,要稳!

所以大部分DB 都是用C或者C++开发的.

MYSQL 服务层使用用C++,INNODB是用C

LINUX 是用C

REDIS 是用C

PG 也是用C

CLICK HOUSE 用的C++

ES 用的JAVA

这个并不是要求DBA都要把C/C++学得如何全面,如何深,如何精通,以及各种标准库. 我们只是能看懂C/C++语法,知道这是个啥,是循环,是对象,是指针. 也并不要求像专业一样C/C++开发工程师写得那么专业! 可以把C/C++当脚本来写,随心所欲. 这不仅是你的DBA护城河,也能让你跨过心里那到坎,简单容易. 跟学骑自行车一样!

我差不多花费4个周工作日写了近两千行的C/C++代码,大量的IF语句.

来干嘛呢? 就是静态解析JAVA应用里面的MYBAITS语法XML文件中的SQL! 有人说通过运行可以动态打印可执行的SQL,是的JAVA SQL日志可以.


当那是动态的,可执行的.不是全面的,只是一个时间或者状态的SQL.

像我这种一线DBA,用上了云就很少玩基础运维DBA的活.当是也不能像国企里面甲方DBA样喝着咖啡,在群里进行商业互吹,然后跑到各种大会吹牛逼,经常闲得蛋疼,然后写写文章,写写PPT,赚赚小外快.有问题呼叫他去观摩观摩,能解决就是专家,不能解决呼叫原厂火力支援.

我们这种冲在一线的,要提前抓住问题的火苗,消灭在萌芽状态.有时候真苦逼,这样子很没有成就感,领导觉得都是小问题.真羡慕二线的专家们.


自然不管你是管什么DB的,只要前面业务是用JAVA开发的,使用SQL语句进行请求.那么你就需要这样的脚本. 把代码仓库里的所有MAPPER文件夹下面的XML文件中的SQL提取出来分析. 我这个项目136个文件,提取了1099个SQL.我发现了9个MYBAITS语法BUG. 然后我把这些SQL提到SQL审核里面去匹配下规则.

main.cpp 是我们的GCC脚本,

main.exe  绿色的,是我们个C/C++的可执行文件;

makeDebug 和makeRelase是编译脚本


脚本运行时候 需要指定目录,在目录下一级搜索.xml文件,然后读取里面的SQL,并保存脚本当下目录ParseXMFetchSQL.sql

这里当然前提你要把代码库各个目录下的XML文件CP在一起,本脚本不进行子目录搜索. 目前本脚本提前1089个SQL,约有30个需要手工修正下.

这30个主要是一个DAO方法里变成2个SQL, 多个GROUP,多个ORDERBY.用GCC去解析着实麻烦.而且这样的SQL概率非常低.


剩余的文件都是测试用的,分为当前目录下的DEMO.XML和其它目录下测试脚本. 没什么深澳的,就是方便快速执行而已,为了调式BUG!

————————————————

写作不易,脚本编写不易 下载: https://pan.baidu.com/s/10w9j7fUIdCcdNPcym-l_Hg?pwd=4562

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-2-5 13:54 , Processed in 0.014955 second(s), 10 queries , Redis On.
返回顶部