引言
在OceanBase 2024发布会的午休期间,几位老朋友一起交流技术,当聊到OB的
物化视图
能力及未来规划时,某数据库厂商专家老A感叹道:
“
OB
这样
简直就是作弊!
”
我不假思索地回应:“
作弊有理!
” 这句话脱口而出的瞬间,强烈的熟悉感扑面而来,勾起了我二十年前的回忆。
那年,刚毕业不久的我,在一次会议上分享自己的优化经验。面对满屋子经验丰富、明显持怀疑态度的各分公司DBA,我心里直打鼓。就在有人质疑我的优化手法有
“作弊”嫌疑时,
领导却坚定地说了一句让我终生难忘的话
:“
作弊有理!
”
1
思绪飘回到二十年前
那时,领导抱怨系统的报表查询很慢
,尤其是他最关心的一个报表需要整整30分钟才能出结果,要求我进行优化。作为一名数据库领域的新手,我对数据库的认知还很浅薄,但也只能硬着头皮接下这个任务。
面对报表背后复杂的SQL查询语句,我确实不知道从何下手。然而,转机很快出现——我发现领导主要查询昨天以前的汇总数据。这个看似平常的发现启发了我:
如果这些历史数据不再变化,查询结果不就已经固定了吗?
经过与业务部门确认后,我采用了以下方案:
每天早上的上班时间,执行一次汇总计算,并将结果存入独立的表B。同时,改造报表的查询逻辑:查询昨天以前汇总数据时直接使用表B的预计算结果,除此之外访问原表A
。这个简单的改动,显著提升了查询性能。
当我告之领导优化已经完成后,他仍显得有些半信半疑。然而,当他点击界面,瞬间看到查询结果时,简直不敢相信自己的眼睛。他对我说:“其他分公司该模块的系统最快也要15分钟,你真是太棒了!”
受到这份肯定的鼓舞,我充满干劲,主动开始优化系统中其他模块的SQL。
2
同事质疑与领导支持
数周后,集团的年终大会在福州召开,技术人员齐聚一堂。出乎意料地,我被评为优秀员工,并被安排向各分公司到场的DBA们分享报表优化的经验。
当我解释说我的方法是将昨天的记录提前计算好,让程序直接查询结果时,台下一片哗然。心直口快的老DBA老张站起身,对我说:“你这个方法不靠谱,简直就是
作弊
,
之前的数据变化了怎么办?
还是要走正道,踏踏实实地学习SQL基本功。
” 听后,我回应说我已经调研过了,从业务角度看,这些数据不会再变化。老张继续说道:“
那你这样手动操作,不麻烦吗?
”
正当我要回应他时,领导开口了。他说道:“我觉得小梁
‘作弊’有理!
你们都是经验丰富的数据库老手,
但我只关注
最终效果
。现在,报表实现了秒级查询,且数据完全可靠。我认为你们都应该向小梁学习,学习他这种创新求变的精神。面对技术问题,他不仅仅是一味地钻研代码,而是主动去业务部门调研,这说明他一定考虑了更多的细节。”
当时,我略感紧张。向领导道谢后,我告诉老张,
我已经将昨日的数据统计设置为
定时任务
,因此无需手工操作。
老张听后有些吃惊,便坐了下来。这时,老王站起来说道:“如果
需要实时统计最新的汇总数据怎么办?
你就无法使用这种方法了吧。所以,小梁,你可不能依赖投机取巧这种
轻功
,还是要静下心来,学好SQL优化技巧本身,这才是放之四海皆准的
铁头功
。”
这时,领导又开口了:“你们可以实际操作看看,统计最新汇总数据的速度如何?”此话一出,在座的DBA们都露出惊讶的神色——
难不成实时统计也能做到很快?
3
再次出乎大家的意料
我准备好了环境,老张亲自操作后发现,即便是
实时汇总,
速度也仅需
30秒
。这结果让所有人都惊住了——这个困扰大家多年的性能难题,居然被一个新人解决了。
我随即向大家解释:“昨日之前的数据已经完成汇总,我们只需要统计
今日数据
,再与
历史汇总数据
合并即可。由于单日的数据量很小,所以处理速度自然就快了。”
说到这里,众人恍然大悟,纷纷感叹:“如此简单的优化方式,为什么之前没想到?” 接下来,各位DBA们齐心协力,探讨如何优化我的后台聚合SQL和实时合并SQL。大家果然都是高手,通过等价改写,我的代码性能有了大幅提升。我学到了许多优化技巧,他们也很兴奋,因为回去后,他们的报表性能就会原地起飞。
后来,我离开了这家公司。多年后,我与老王、老张和领导再次相见,我将自己撰写的《收获,不止SQL优化》赠予给他们作纪念。领导笑着对两位老DBA说道:“小梁都出书立著了
,两位老弟,你觉得他的
铁头功
如何
?
”
4
回到OceanBase发布大会
“梁老师,下午的会议快开始了,咱们走吧。”同事的低语声把我的思绪拉回了现实。
在回会场的途中,我告诉同事那段二十年前的优化经历。他笑着说,原来梁老师刚毕业时就实现了如今流行的数据库物化视图能力。是的,
物化视图是一种
预计算并存储复杂查询结果的数据库对象,
避免在每次查询时重复计算复杂的关联和聚合操作,和我的操作其实并
无
本质差异
。
我也多次给DBA分享过物化视图的知识,并划出逐级递增的
三层境界
,以便于大家理解:
第一层
就是不具备物化视图能力;
第二层
是具备物化视图能力,但只能通过在SQL中
明确指定视图名称来进行匹配
;
第三层
是创建物化视图后,SQL
无需指定具体视图对象
,系统会根据SQL的特征自动匹配相应的物化视图,使用起来无感,能极大地提升了便利性和效率。目前我所了解的数据库厂商中,部分优秀者已达第三层,并持续在物化视图的同步、更新稳定性、一致性和性能优化方面努力提升。
然而,
OceanBase
在物化视图上的全新规划则更为出色,出乎了我的意料,可以说是进入了一个
更高的层级
!就是这种规划,让老A直呼OB
作弊
!
这
到底是怎么一回事呢?
原来,
OceanBase
即将推出
根据用户的
实际操作行为
,
智能
生成物化视图
的特性,
以适应不断变化的业务需求。
这种智能化的物化视图管理,不仅减少了手动维护的工作量,还提升了查询性能和系统的整体响应速度。
这种特性上线后,随着时间推移
,
数据库
针对静态结果集的访问会不断增多
,
针对实时全量计算则会不断减少
。
换句话说,就是数据库性能可能会
越跑越好
,系统压力可能会
越跑越少
。老A觉得,照这样发展下去,
自己的
铁头功将被人以轻功压制
,一时情急,从嘴里迸出
“作弊”
二字。
结语
其实,老A不了解的是,OceanBase的OLAP能力可远不止物化视图,还包括向量化执行引擎、智能压缩、HTAP行列混存等技术,在TPC-H 等基准测试中有着出色的表现,能够在处理复杂的大数据场景时展现出卓越的性能和高效的数据处理能力。是的,可不止是
轻功
,
OceanBase的
铁头功
也是极强的!
特别说明一下,本文
只提到物化视图,主要有以下三个原因:一来,
OceanBase的各种特性
在思想这个本质层面是一脉相承的
,即——
“
贴近业务、注重算
法
,打造出客户满意的智能数据库”;二来,物化视图勾起了我的个人回忆;三来,篇幅有限,不便过多展开。
希望
本文
能给大家带来启发。我认为,能与业务场景结合而施展出来的轻功,是一种智慧,决不是什么
作弊
!当然,铁头功也是非常重要的,
轻功+铁头功=无限可能
。
最后,让我们一起,
为OceanBase等一批
中国原创数据库
加油,打CALL!
更多精彩原创内容见公众号
点关注
不迷路
往期回顾,欢迎留言与转发
预告:《超融合数据库》即将出版
。