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

指尖上的架构 2024-09-04 05:10:52

最近系统上线,很多同事在讨论复杂的应用逻辑是不是应该写到存储过程里,发出了各种质疑...

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

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

0 阅读:0

指尖上的架构

简介:感谢大家的关注