这更像是一个架构问题。我曾经在一家拥有 Web 应用程序的金融公司工作。
前端javascript。
中间层是 WebAPI,用于访问后端 SQL Server。
后端 SQL Server 数据库。
该公司将其所有业务逻辑都放在存储过程中。和其他公司谈过之后,我开始听说大多数把他们的业务逻辑放在中间层。
我曾经问过金融公司的某个人,为什么会大量使用存储过程,但没有得到很好的答案。最近,在一次求职面试中,他们询问将所有业务逻辑放在数据库中与中间层的优缺点是什么。我没有很好的答案。
任何人都可以提供一些关于为什么这是或不是一个好主意的想法吗?
Mic*_*een 16
A) 规模 中间层可以很容易地扩展——因此有了网络农场的概念。扩展数据库层要困难得多。虽然有些 产品 可以做到这一点,但它并不是微不足道的主流。
B) 成本通常网络服务器是普通或花园的盒子。然而,数据库服务器往往更大、更复杂且更具弹性。这一切都转化为“昂贵”。最近的一位雇主估计,DB 上的 CPU 滴答比应用服务器上的 CPU 滴答贵十倍。
C) 重用存储过程中包含的逻辑不能简单地链接到例如独立的移动应用程序中。更改 SP 会影响使用该数据库的每个应用程序,无论该应用程序是否准备好进行更改。
D) 重用存储过程中包含的逻辑对于使用数据库的所有应用程序都是通用的。程序员不能随心所欲地回避规则。更改 SP 会影响使用该数据库的每个应用程序,从而确保整个企业的一致性。
E) 工具与数据库相比,应用层中有更多、更复杂的语言、工具和技术可用于开发(来自评论,感谢)。
F) 网络流量通常,业务功能需要多次读取和/或写入。通常,一个语句的输出将成为下一个语句的输入。如果应用程序中包含 SQL 语句,则每个语句都需要到服务器的网络往返。如果 SQL 保存在存储过程中,则会有一次网络旅行,发送参数并只接收最终结果;避免了中间结果的网络成本。