在PHP或MySQL中处理业务逻辑?

6

在一个流量比较大的网站上,如果应用程序/业务逻辑是作为存储过程、触发器和视图编写的,而不是在PHP代码本身中编写,这会有影响吗?

考虑到可扩展性,最好的方法是什么?


你能量化一下你所考虑的请求速率吗? - memnoch_proxy
假设每天有100,000个页面浏览量。 - Sabeen Malik
7个回答

10
我无法提供统计数据,但是除非您计划将PHP换成另一种语言,否则我可以说将业务逻辑保留在PHP中更具有“可扩展性友好性”。
解决Web服务器负载问题总是比在数据库中遇到这些问题更容易和便宜。您的数据库始终需要快速响应,仅仅向其添加镜像是无法解决问题的。您拥有的数据库从属越多,就需要执行越多的写操作。

1
+1。是的,这正是我所思考的...我可以平衡负载PHP,但如何平衡负载MySQL呢? - Sabeen Malik

3

根据我的经验,你应该将业务逻辑放在PHP代码中,而不是移到数据库中。假设你的数据库在一个独立的服务器上,当请求到来时,你不希望数据库忙于计算公式。

保持数据库的极速响应能力,以处理查询、插入和更新操作。


2
一款良好的PHP应用程序足够了,但请记住尽可能减少对数据库的调用。在PHP中存储您以后需要使用的值,缩短查询,使用缓存等。
MySQL优化始终是必须的,因为它也将减少PHP对数据库的调用量,从而获得更好的性能。因此,如果您的目标是提高性能,那么一定要考虑存储过程等。但是,如果您的PHP代码编写不好(存在许多不必要的数据库调用),仅靠MySQL本身可能不够。这就是为什么我认为PHP必须编写得很好,同时在开发过程中考虑到整个流程,以避免不必要的东西干扰。例如,在“配合”适当的MySQL使用缓存可以显著提高性能。

你能否提供一些个人经验和/或统计数据来具体回答可扩展性的问题? - Sabeen Malik

2
我认为,将数据库代码放在数据库中以进行性能调整可以更好地扩展。随着记录数量的增加,您还将拥有更好的数据完整性,这对于数据的实用性至关重要。你不会看到很多应用程序中带有所有代码的千兆字节大小的关系型数据库。
阅读一些有关数据库性能调整的书籍,然后决定是否要冒险使用应用程序代码来决定公司的数据。

经过这么多年将所有东西都放在 PHP 中,我开始感觉将逻辑放在数据库中会使很多事情更容易、更集中和更透明。然而,当我考虑可扩展性时,不知何故负载平衡 PHP 更容易、更便宜,而我认为 MySQL 不是这样的.. 你能否请给予一些解释? - Sabeen Malik

2
在决定将业务逻辑放在数据库中还是应用程序代码中时,需要考虑几个因素。
如果同一数据库将从不同的网站/网络应用程序中访问,那么就需要考虑存储过程、触发器等增加的复杂性,而不是在多个代码库中尝试维护数据库访问逻辑等。
关于关系数据库通常适用于什么以及MySQL特别适用于什么,PHP最擅长什么这个问题比较简单。SQL的各种变体都会很好地插入、更新和删除数据。通常它们也很好地处理原子事务。但是,大多数SQL变体(包括MySQL)不擅长复杂计算、即时日期处理、文件系统访问等。
另一方面,PHP非常擅长处理计算、日期、文件系统访问。通过花费一些时间,您甚至可以设计您的PHP代码,以便只有在必要时才检索记录并进行存储。
显然,使用您最熟悉的工具更有意义。
最后,请记住,仅仅因为电钻可以用来切割石膏板,或者因为锤子可以用来拧螺丝,并不意味着它们应该用于这些任务。有时我认为,程序员尝试制作能够做所有事情的更强大的工具,而不是制作一个非常好地完成一件事情的简单工具,可能会造成更多的潜在损害。

所有的观点都是正确的。但我真正想了解的是,如果在数据库层面上应用业务逻辑是一个坏主意,为什么我们会看到世界上有这么多高薪和备受追捧的数据库管理员呢? - Sabeen Malik

0

我的观点是,即使没有开发大型应用程序的经验,也要在数据库中编写业务逻辑,原因如下:

1-可维护性,我认为语言会在短时间内废弃函数并更改许多其他内容,因此如果PHP更改版本,则需要将代码适应新版本。

2-数据库往往更具语言稳定性,因此当关系型数据库管理系统(RDBMS)的新版本推出时,通常不会在编写查询或存储过程的方式上进行太多更改,甚至根本不会更改。在数据库中编写逻辑将减少由于新数据库版本而导致的代码适应。

3-RDBMS比编程语言更有可能长期存在。此外,由于您的数据很重要,RDBMS开发人员非常担心自动迁移整个数据到新的RDBMS版本,包括您的存储过程。当Clipper死亡时,没有办法将系统迁移到新的编程语言,它们必须完全重写。

4-如果您认为有一天出于某种原因(例如语言死亡)完全更改编写应用程序的语言,则唯一需要重新编写的是演示文稿和存储过程调用,而不是业务逻辑。

我想要从这里的其他人那里了解我的观点是否有道理,如果没有,为什么。我和Sabeen Malik处于相同的情况,我正考虑开始我的第一个大型项目,因为我写的内容而倾向于SPs。所以如果我的观点不正确,那么现在是纠正它的时候了。


-1

MySQL不擅长使用高级数据库技术,它简单而快速。PHP作为一种动态语言,使数据处理非常容易。因此,通常使用PHP是有意义的。


1
"MySQL不擅长使用高级数据库技术" ... 这是一个大胆的说法,你能提供一些统计数据或例子吗?... 当你说“通常使用PHP有意义”时...那么你能告诉我什么情况下不使用PHP有意义吗?" - Sabeen Malik
1
"高级DB技术"是什么意思?MySQL不支持哪些高级数据库技术? - Erkan BALABAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接