跳至主要內容

禁用存储过程的原因

Hirsuntech大约 8 分钟

禁用存储过程的原因

在阿里的开发规约中,有一句明确的说明:禁止使用存储过程,存储过程难以调试和扩展。

这句话足以说明问题,但为什么偏偏阿里巴巴这样的互联网机构要禁用存储过程?而在银行、证券、保险等传统金融行业中却大量使用存储过程?

只要涉及到金融项目基本都离不开存储过程。这是为什么呢?

银行业务场景分析

银行使用存储过程的原因

  1. 数据是核心命脉:银行的资产、员工等都是数据库中的一条条数据。
  2. 早期信息化建设:二十年前,中国银行业信息化建设中没有足够好的国产数据库,因此大量采购了国外的Oracle和DB2。
  3. 商用数据库的成熟性:这些数据库厂商提供了完整的售后服务和实现案例,帮助银行规避大量风险。
  4. 预算充足:银行在项目实施部署时可以花大量资金采购高性能服务器,满足系统要求。
  5. 开发技能要求:银行信息科技处的员工需要掌握存储过程的开发技巧。

银行业务场景示例

  1. 数据存储与ETL:外围系统的数据存储在数据库中,每天由ETL服务器抽取数据,调用数据仓库中的存储过程进行数据加载。
  2. 数据仓库与数据集市:通过T+1的运算,保证数据可以通过多个维度拿到现成的结果。

互联网行业禁用存储过程的原因

信息安全问题

  1. 去 IOE 战略:去 IOE 意味着软件进行国产化。银行核心业务仍然被 Oracle和DB2 占大多主体,存在潜在风险。
  2. 存储过程与数据库绑定:使用存储过程与某个数据库产品绑定,迁移代价高,增加了风险。

技术层面的问题

  1. 水平分表问题:存储过程只能处理局部数据,无法解决分布式场景中的问题。例如,无法对所有数据分片进行统计分析。
  2. 数据库压力激增:存储过程放在数据库中,增加了数据库的压力,前端缓存的努力可能徒劳无功。
  3. 分布式事务问题:存储过程无法保证分布式全局事务的完整性,导致数据一致性问题。

开发过程中的问题

  1. 难以调试:存储过程难以调试,没有内置的版本管理方案,调试和维护困难。
  2. 业务执行碎片化:存储过程返回的信息少,问题排查复杂,增加了开发和维护的难度。

某阿里员工的评论

某天下午账务团队更新存储过程,导致 load 瞬间激增,回滚失败,最终只能关闭服务器监听端口进行回滚。这个案例说明了存储过程在实际应用中的问题。