使用存储过程挺香的!为何阿里要禁止?

詹姆斯邦德007 2024-09-03 11:16:07
最近系统上线,很多同事在讨论复杂的应用逻辑是不是应该写到存储过程里,发出了各种质疑...

 

开发人员觉得存储过程不利于工程化,具体来说可读性,扩展性都不够。而且不利于版本管理,团队协作。

 

DBA认为Oracle太贵,其他数据库存储过程优化差,所以把成本shift到应用软件里。

 

针对存储过程优缺点的争论由来已久,这里我们不妨来详细盘点一下存储过程的利与弊。

 

一、存储过程的优势

 

存储过程代码相对于SQL,复用、扩展、通用性都要更强!存储过程在后台数据库中运算,只要前端传参即可,所有的数据处理逻辑都写成存储过程,还有利于统一数据的出入口,易于实现数据权限管控!

 

总结一下,存储过程的优点主要来源于两方面:

 

1、SQL 的数据处理能力

 

至少目前来看结构化数据处理尤其是复杂计算,SQL 仍然比 Java 强很多。

 

2、库内计算的便利

 

数据不用出库省下的 IO 成本对数据密集型任务有莫大优势。

 

图片

 

二、存储过程的缺点

 

传说阿里有一条军规,“禁止使用存储过程,存储过程难以调试和扩展,更没有移植性”。

 

1、并不是所有开发人员都熟悉怎么使用存储过程,包括像怎么用SQL表示各种复杂逻辑,怎么调试存储过程。

 

2、SQL是标准的,但存储过程以及控制逻辑,都是各家数据库自已的方言,不可移植到其它数据库。

 

3、存储过程也是代码,但却和代码分离开了,存储在数据库里。版本控制困难,进而造成从开发,测试,到上线整个流程的复杂度增加。

 

4、写JAVA代码的人和DBA通常是两波人,引来许多管理上的问题,如,数据库权限,两边人员打乒乓球。

 

5、工具支持不完善,不好调试(这点取决于用什么数据库)。

 

三、Oracle存储过程

 

现在互联网行业对存储过程的主流论调就喊打喊杀,存储过程难以调试、导致数据库压力增大、分布式环境不适应等等,实际上存储过程并没有这些毛病,错用存储过才会有这些毛病,大量用户进入,数据库出现性能问题,他们肯定会说,存储过程真垃圾,真不应该用,而实际上,并不是存储过程垃圾,而是用的人水平垃圾!用好Oracle存储过程真的很实用,尤其在数仓ETL调度、核心复杂应用逻辑,存储过程相当的稳定。

 

以下是使用Oracle存储过程规范

 

图片

 

图片

 

四、总结

 

简而言之,对于存储过程,只要使用关系数据库,就可以用它,无论是互联网应用还是非互联网应用,是MySQL还是sql server、Oracle,这些都不是影响使用存储过程的因素。但是不可滥用存储过程,数据的存储可以用存储过程,复杂的业务逻辑不应该由存储过程实现。一旦项目中出现大几十行甚至几百行的存储过程,就应该想法子优化了。

 

作者丨詹姆斯邦德007
来源丨公众号:IT邦德(ID:jeamesDB)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告