Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

别瞎搞 MySQL 的存储过程

  以前用 MySQL 的时候我就爱装 B,各种存储过程函数写了一堆,把很多逻辑都交给数据库了。这些东西确实减少了很多开发量,如果把这些东西用业务代码写出来可能会写出一大坨代码。然而在一个大型项目中,这么玩可能会扑街。数据库只要做好数据存储这件事就够了。
  通常评估一个数据库能扛多少 QPS 是根据表结构、读写比例来考虑的。在数据库中做逻辑处理会造成额外的 CPU 开销,而这些逻辑处理的开销是很难评估的。所以如果使用大量存储过程或自定义函数来处理逻辑会造成服务器硬件资源评估错误。分配多了就是资源浪费,分配少了就是服务不稳定。
  另外,存储过程和自定义函数是很难监控的。如果有一个中间层来监控所有 SQL 语句,如果是一般的查询可以分析 SQL 语句了解到这条语句到底都操作了哪些资源。但如果是存储过程,中间层的监控就无法知道客户端到底在干嘛,除非去数据库服务器把这个存储过程或自定义函数的具体语句给查询出来分析。
  虽然我也反对在大型项目中使用存储过程和自定义函数,但理由就以上两点。有人觉得这些定义在数据库服务器上的东西影响了程序的可读性,我觉得其实恰恰相反。如果命名没问题,使用这些东西是可以提高程序可读性的。因为有些东西在数据库里写只是几个查询语句而已,如果放到业务代码中可能就变成好几十行的逻辑代码,而且还可能被别人轻易改动。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^