【发布时间】:2009-12-16 06:28:19
【问题描述】:
对于典型的 3 层应用程序,我看到在许多情况下,它们在数据库中使用了大量复杂的存储过程。我不能完全从这种方法中受益。以我个人的理解,这种方法有以下缺点:
- 事务变得粗糙。
- 业务逻辑进入数据库。
- 大量计算是在数据库服务器中完成的,而不是在应用程序服务器中。同时,数据库还需要做它原来的工作:维护数据。数据库服务器可能会成为瓶颈。
我猜它可能有两个好处:
- 无需编译即可更改业务逻辑。但 SP 比 Java/C# 代码更难维护和测试。
- 减少数据库连接数。但是一般情况下,数据库的瓶颈是硬盘io而不是网络io。
谁能告诉我使用大量存储过程而不是让工作在业务逻辑层完成的好处?
【问题讨论】:
-
您将在硬盘驱动器之前 长时间 使网络连接饱和 - 100 Mb/s 连接 = 理论最大值为 12.2 MB/s。 PATA 达到 133 MB/s,SATA2 可以达到 3 GB/s
-
不是一个真正的答案,但我在一个项目中,在数据库中有很多 SP,原因之一是项目人员的技能和经验。我们有很多人喜欢使用 PL/SQL“锤子”。因此,尽管有最佳实践,但大多数事情看起来都像是 PL/SQL 的“钉子”。
-
您的问题似乎是基于三层是“方式”的概念。 Philip Greenspun 写了一个fairly scathing critic of the benefit of the three-tier architecture。尽管他的一些论点有些过时,但即使在今天,它们仍然具有一定的道理。
-
阅读您的链接。我是一个大整合的支持者,所以也希望看到 90 年代后期的那些 cmets。
标签: database stored-procedures