详谈为什么互联网公司禁止使用存储过程

详谈为什么互联网公司禁止使用存储过程其实这一句话足以说明问题,有小伙伴肯定会疑惑,在银行或者证券等公司工作为什么会大量使用存储过程呢?这就是我们今天讲解的内容,首先两个问题 像银行这类系统,通常会采用商用的数据库 Oracle、DB2

!!! 本文已参与「新人创作礼」活动,一起开启掘金创作之路。更多干货文章,可以访问 菜鸟厚非

【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移值性。

其实这一句话足以说明问题,有小伙伴肯定会疑惑,在银行或者证券等公司工作为什么会大量使用存储过程呢?这就是我们今天讲解的内容,首先两个问题

1 . 为什么银行都在用存储过程 2 . 存储过程为什么成为互联网弃子

像银行这类系统,通常会采用商用的数据库 Oracle、DB2 等,应为这些供应商有着完整的解决方案,可以帮助银行规避大量的风险。银行的一些外围业务会使用一些国产的分布式数据库或者 MySQL 这样开源的数据库。

银行是以数据为核心,且早期银行在建设业务的时候,没有好的国产数据库,所以采采购了 Oracle、DB2 这样有成功经验的的数据库。且每套数据库都有着自己的一套存储过程开发方式,只要掌握了存储过程的开发技巧,对数据的交互过程是没有问题的,对于前端使用 go、java、c++ 才是第二关心得问题。

但是近些年,互联网企业,都在禁用存储过程呢。

1 . 闭源

首先其实去 IOE (进行国产化),应为有些数据库并不开源,你不知道会不窃取你的核心数据,会不会外泄。 在这里插入图片描述2 . 数据迁移 在这里插入图片描述 如果说切数据库可以,数据迁移是比较好迁移的一方,但是大量的存储过程要全部重写,一旦重写谁能确保新的存储过程在新的平台执行没有问题,一旦影响的核心业务谁能谁敢带来的风险。

尽管一直在喊去 IOE ,在一些外围业务上会用 Mysql 这样的开源数据库进行一些尝试,但在核心业务上仍然是 Oracle、DB2 等数据库。

3 . 分布式场景的问题 在水平分表的情况下,用存储过程处理所有数据的分析结果,存储过程是做不到的。应为存储过程只能作用于局部分片的数据库。

4 . 数据库压力激增 在这里插入图片描述 大家也都知道分布式缓存架构,这样的目的是从上到下,逐级的进行筛选,尽可能的使少量的请求到数据库,减少数据库压力。应为百分之八九十处理慢,都是在数据库 SQL 层面。

应为存储过程本身都是在数据库层面,之前多的很多缓存方面都是徒劳的,最后处理数据的时候还是要到存储过程进行处理。

5 . 无法保证分布式全局事务 在这里插入图片描述假如我们在一个水平分片情况下,处理数据导入,数据要均匀的分布在每个表。假如分片1、分片2成功了,分片3应为某个字段没有效验通过失败了数据进行了回滚,那可不可以通过分片3存储过程回滚分片1、分片2的数据到导入前的状态数据呢。

显然是不可能的,在数据库层面也没有提供跨进程的数据库交互方面的 API ,所以在分布式场景下存储过程是不是就不好用了。

6 . 难以调试,没有内置的版本管理方案

这个很多同学都身有体会,我们在处理百万数据库的时候,很可能应为某一行的某个字段,而导致存储过程执行异常,这个你怎么可以快速从百万数据库从快速找到那一条呢,这个是相当费劲的。

7 . 业务执行碎片化 在这里插入图片描述在银行应为场景下,对于核心的业务,银行会让自己的员工写存储过程处理流水、账单等业务数据,外围外包系统开发人员对于核心的业务不是会那么了解,他们只需要调用银行员工写的存储过程即可,当然这也是职责分明。

但是有个特别恶心的事情,如果某一天执行存储过程失败了,对于外围系统收到的异常信息是特别少的,可能只提示、存储过程的某一行、异常时间,不知道当时的数据场景。作为外包人员只能去猜,是哪一块执行异常,然后根据本地日志定位到调用的哪个存储过程发生了错误,然后又到数据库根据数据库执行异常,结合去分析。想想都头发麻,是不是这么回事,懂得都懂。

一个有趣去的帖子

在这里插入图片描述

今天的文章详谈为什么互联网公司禁止使用存储过程分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13554.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注