abcbuzhiming
2019-03-23 09:39:01 +08:00
这个问题 10 年前,在 ITeye 还叫 javaEye 的时候不就讨论过了吗?
只有非常稳定的,基本不变动的业务,才适合放在存储过程里,因为存储过程的调试成本是非常高昂的,你去找个有经验的 DBA 试试。就算是有经验的 DBA,和有经验的码农放在一起,后者调试代码的成本也比前者调试 SQL 的成本低的多。所以只有像银行,医院,12306 这样的,业务成熟基本不变的地方,才会放存储过程。互联网这种需求一天 3 变的地方你业务放存储过程是嫌自己头铁加班加的少吗?
另外还有一个历史原因,早年的数据库,本质是个操作系统,可以看一下当年 IBM 的盖世之作 IBM System R,DB2 的前身,看见人家叫什么(操作系统 R ),自身的性能,是可以把当年的应用层开发语言的性能吊起来打的,而且当年计算机硬件资源又很匮乏,哪像现在,阿猫阿狗随便买个云都是 4 核 8G 的,spring boot 架起来直接就能跑。当年那是“不得不一定要优化程序提升性能才能正常上线”。所以性能在当时比应用层语言强处很多的存储过程就自然落入了开发者的眼里了。
现在,数据库很大程度上变成了数据仓库,搞分析有各种查询引擎,流处理,一般性查询业务应用层技术开发的很快,成本又低,JVM 优化了这么久,再加上硬件提起来后,大部分场合也吃的住了,存储过程这种开发调试代价高昂的东西,自然就边缘化了