• 数据库的存储过程等编程方式是面向过程的,开发效率低,扩展性也很差,对需求无法做到快速响应。相反的,Java是面对对象编程的,就会灵活了许多,同时如果是作为Java开发人员,对Java语言的掌控能力应该会强于sql,选择自己的长处来做编程,出现bug以及需要优化时,也会容易许多。
  • 如果选择使用存储过程等来实现复杂业务,那么当出现问题时,自然会需要定位异常和错误,相比起Java完善的日志体系和监控告警机制,数据库端的这些能力就显得逊色很多,会加大开发排查的难度。
  • 因为用的是数据库的功能,那么就可能会耗费数据库的资源,数据库的性能也会被影响到,更严重的情况是,存储过程和触发器等还有可能导致慢sql,这样就会使数据库连接长时间无法被释放,导致数据库连接池资源不够。
  • 使用存储过程等方式,由于不具备可伸缩能力,因此如果要提高性能,那么只能选择纵向扩容,提升机器配置,而机器配置越高,价格会越昂贵,成本就会越高,而且纵向扩容总有个极限,而如果使用的是Java来实现复杂业务,因为是面对对象编程,那么可以配合上读写分离,分库分表等方式组合使用,还可以加机器做横向扩容,支持高扩展。
  • 最后一线大厂的开发规范也是禁止开发团队使用存储过程,触发器,函数编程等,只有那些早期的项目才有存储过程,触发器,函数编程等。

以上是我看到的大牛对存储过程和触发器等的一些想法,这里分享出来,主要是为了那些不想学存储过程和触发器,但是又怕面试被问到的同学。