大数据&云计算|作为数据库核心成员,如何让淘宝不卡顿?( 二 )
必须支持动态扩容 。
必须走分布式化路线 , 百分百不动摇 。
3.3 结合定位 , 分析自己能做的
3.3.1 分析我们的架构定位
(1)大前提
我们要做通用型框架 , 不参与业务 。
从软件设计原则出发 , 开闭原则:对扩展开放 , 对修改关闭 。
说明:大修改就意味着不稳定 , 因此:我们要做到尽可能少的修改原来的代码 。 在程序需要进行拓展的时候 , 不能去修改原有的代码 , 实现一个热插拔的效果 。
(2)当前架构现状
淘宝网主要使用hibernate/ibatis传统框架:
本文插图
初始框架
(3)分析我们的架构定位
淘宝数据库团队当时使用映射框架(hibernate/ibatis)作为数据库交互入库 , 为了不让他们修改代码 , 那我们只能在ibatis/hibenate这类映射框架之下 。
同时jdbc是与底层数据库交互的Java数据库连接驱动程序 , 是基础能力 , 我们要使用它 , 而不是改造它 。
结论:我得把TDDL安插于ibatis/jdbc之间 , 于是有了第一张架构图:
本文插图
TDDL的定位
3.4 总结 , 我们能做什么?
本文插图
结合我们的目标 , 通用方法 , 大前提以及架构定位 , 分析下我们能做和不能做的 。
不能做的:
索引 , 因为这个是设计阶段 , 强业务相关 。 与大前提冲突:我们不参与业务 。
能做的:
语法优化
排除sql问题
下推优化
分表分库(自动水平分表 , 水平分库)
读写分离(读写分离/分布式化与动态扩容)
四 我们如何做?
4.1 语法优化
为达到语法优化的目的 , 我们需要具备什么能力?
简单来说:
我们需要认识这个别人提交给我的sql 。
我能拆解sql 。
优化与重组这个sql 。
本文插图
专业点来说:语义分析能力 。
sql解析
sql规则制定
sql优化
sql重组
因此:我们需要设计一个sql解析器 , sql优化器 。
4.1.1 解析器
解析器的核心是词法分析、语法语义分析 , 也就是说来了一条 select/update/insert/delete语句 , 你能认识它 , 而且你知道下一步该怎么处理 , 同时为后面的优化器打下基础 。
核心:将sql解析为一棵语法树 。
例:
sql语法树:
本文插图
4.1.2 优化器
核心:
在sql解析成sql语法树后 , 使用sql优化规则(1. 语法优化 2. 下推优化) ,通过对树进行左旋 , 右旋 , 删除子树来对语法树进行重构sql语法树 。
将重构的语法树进行遍历得到优化后的sql 。
(1)语法优化
函数提前计算
判断永真/永假式
合并范围
类型处理
(2)下推优化
Where条件下推
说明:提前条件过滤 , 提前获取数据 , 减少后期计算/IO/网络成本 。
JOIN中非join列的条件下推
说明:提前过滤 , 减轻后期join计算成本 , 达到“小表驱动”的目的 。
等值条件的推导
说明:同理 , 提前过滤 。
4.1.3 总结
sql解析器
负责将sql语句化为sql语法树 。
sql优化器
负责将sql语法树利用sql优化规则 , 重构sql语法树 。
推荐阅读
- 穿搭|只有极简风能穿出高级?你错了,"设计感穿搭"也能出彩,来试试
- 万州微视界|打工女皇——吴士宏,用12年做到年薪1亿"穷"不是枷锁女儿当自强发愤图强
- 王诗龄 |6年过去了,穷养的森碟成了"网球达人",而富养的王诗龄会啥?
- 中型SUV|日产受欢迎B级车,兼具动力和舒适,楼兰可以"C"位出圈吗?
- 旅游与摄影media|闽越三大名山之一,朱熹曾在此创办书院,号称"海上仙都"
- 旅游与摄影media|世界三大千岛湖之一,中国江湖优质水之首,誉为"天下第一秀水"
- |半岁宝宝''感冒''被忽视 鼻窦发炎眼内脓肿险失明
- |10.10干眼关爱日,爱尔眼科重磅发布国人干眼大数据报告
- 伊秀海报时尚|丹媚&赤尾搞事情?国庆云打卡成功掀起线上旅游热潮!
- 汽车|当越野遇上摇滚会绽放出怎样绚丽的烟火 哈弗H9&面孔乐队自驾之旅