妄谈数据库框架(非整个框架全部),见笑,请多指正:

缘起: 有朋友说:
在改进MySQL的优化器之前,需要先分析优化器的输出是否需要改进,插件式存储又割裂了SQL引擎的完整逻辑,虽然局部改进是可能的,但总体而言在现有框架下MySQL的优化器没有多大改进的价值。


妄谈数据库框架,见笑,请多指正:
一友说"插件式存储又割裂了SQL引擎的完整逻辑...总体而言在现有框架下MySQL的优化器没有多大改进的价值".

我们且做个技术分析:

1 插件式框架,可以静态/动态加载组件,方便在同类不同属家的模块间切换,这种设计是良好的. 很多软件的设计都采用了"微内核+插件"这样的方式构筑了强大的应用.如Ecplise生态圈.

2 数据库范围内, MySQL的属于插件式, 还有无其他数据库也有插件式的设计呢? 答案是:PostgreSQL的存储层也是插件式. 这点可以从f_smgr结构体可以看出(分析smgr层, 可以参看 @那海蓝蓝 的博客:http://blog.163.com/li_hx/blog/static/183991413201172483824324/ 之 http://blog.163.com/li_hx/blog/static/18399141320117266474331/http://blog.163.com/li_hx/blog/static/18399141320117258368583/ ),只是PG这些年的发展,一直没有生长出独立且有影响的存储层,所以这一点鲜为人知. 也许这给大家造成了MySQL独家使用插件式设计的印象(此一句是妄测的,见笑).

3 "插件式存储"一说如果改为"插件式事务与存储引擎"更为妥当, MySQL的server层只定义了事务的接口,具体实现ACID特性的,还是server层下如InnoDB一类的插件实现了事务与存储功能. 强调这个,其实是在强调数据库系统的本质--事务, 如果只理解InnoDB为存储引擎则可能谬以千里了. 这也是越来越多的人舍MyISAM等而选InnoDB的内在原因,选的是事务保障而非简单的存储.
    
4 一旦模块被加载,在运行态,他们就是一体的,效率高低不取决于是否是插件式(插件式的设计在运行态下,只是函数指针技术的应用,没有效率损失). 而插件式设计的优劣在于接口层是否考虑妥当.
对于插件式设计而言,如果接口层把需要执行的任务/需要传递的信息规定清楚,则运行态下和是否是插件式根本无关(动态加载的插件,只首次使用时加载耗费一点代价;InnoDB在启动时即加载所以连这一点儿影响也不存在). 插件式设计只是设计层面的问题而非运行态的问题,所以"插件式存储又割裂..."不妥;如果硬要说割裂,那么其实可以认为是"接口层"定义的尚不清晰而不是“插件式”的过错。 所以,“总体而言在现有框架下MySQL的优化器没有多大改进的价值"这句结论自然就不成立了。

5 额外谈谈MySQL优化器的未来。
这个是个特大话题,非三言五语能说透彻。更何况短短微博能轻易穷尽。
简单说:
1)MySQL优化器一直在进步,业内有识之士从5.6和5.7的源码中已经发现这一明证。大规模持续投入使的MySQL比历史上任何阶段都进步的快速。
2)任何数据库的优化器都在进步着,这是社会需求推动的。
3)MySQL的优化器在需求推动下如何进步?可以从技术和历史发展机遇(发展机遇暂且不讨论)2个方面来讨论。技术方面,MySQL优化器没有所谓的插件式框架限制其发展的伪命题存在,而MySQL内部不断的对优化器进行迭代式重构(这是架构的改进),不断地采用各种技术提高优化器的性能(这是功能的改进)。    
4)更多技术细节:《数据库查询优化器的艺术》一书在第四篇第17章/第18章/第19章深入到细节,讨论了PostgreSQL和MySQL的优化器的异同和优劣,供参考。
     
6 框架
有关框架的更多讨论,欢迎更多的有实据的讨论和指正。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值