【问题标题】:Business Logic in PHP or MySQL?PHP 或 MySQL 中的业务逻辑?
【发布时间】:2010-12-14 19:35:48
【问题描述】:

在流量合理的网站上,应用程序/业务逻辑是否编写为存储过程、触发器和视图,而不是 PHP 代码本身是否重要?

牢记可扩展性的最佳方法是什么。

【问题讨论】:

  • 你能量化一下你想到的请求率吗?
  • 假设每天有 100,000 次页面浏览量

标签: php mysql business-logic


【解决方案1】:

我无法为您提供统计数据,但除非您计划将来将 PHP 更改为另一种语言,否则我可以说将业务逻辑保留在 PHP 中更“可扩展性友好”。

解决 Web 服务器负载问题总是比将它们放在数据库中更容易且更便宜。您的数据库将始终需要快速点亮,只是向它扔镜子并不能解决问题。您拥有的数据库从属设备越多,您需要执行的写入操作就越多。

【讨论】:

  • +1 .. 是的,这正是我的想法……我可以对 PHP 进行负载平衡,但如何对 MySQL 进行负载平衡。
【解决方案2】:

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

让您的数据库快速处理选择、插入和更新。

【讨论】:

    【解决方案3】:

    我认为,将数据库代码保留在数据库中,可以随着记录数量的增加而对性能进行调整,从而获得更好的可扩展性。您还将拥有更好的数据完整性,这对数据甚至有用都至关重要。您不会在应用程序中看到很多 TB 大小的关系数据库及其所有代码。

    阅读一些关于数据库性能调优的书籍,然后决定是否要拿公司的应用程序代码数据冒险。

    【讨论】:

    • 在将所有东西都放在 PHP 中这么多年之后,我开始觉得在数据库中拥有逻辑可以让很多东西变得更容易、更集中和更透明。然而,当我想到可扩展性时,不知何故,PHP 的负载平衡似乎更容易、更便宜,而且我认为我不能对 MySQL 说同样的话.. 你能解释一下吗?
    【解决方案4】:

    在尝试决定将业务逻辑放置在数据库中还是应用程序代码中时,需要考虑几件事情。

    是否会访问同一个数据库 来自不同的网站/网络 应用程序?将网站 / 应用程序写在相同的 语言还是其他语言?

    如果数据库将在单个站点中使用,并且该站点是用一种语言编写的,那么这将不成问题。否则,您将需要考虑存储过程、触发器等与尝试在多个代码库中维护数据库访问逻辑等所增加的复杂性。

    什么是关系数据库 一般有好处,什么是 MySQL 适合具体吗?什么是 PHP 最擅长?

    这个考虑是相当直截了当的。全面的关系数据库,特别是任何 SQL 变体中的关系数据库,在插入、更新和删除数据方面都会做得很好。通常,它们也能很好地处理 ATOMIC 事务。但是,大多数 SQL 变体(包括 MySQL)并不擅长复杂计算、即时日期处理、文件系统访问等。

    另一方面,PHP 在处理计算、日期、文件系统访问方面非常快。通过花一点时间,您甚至可以设计您的 PHP 代码以使记录只检索一次,然后在必要时存储。

    你最熟悉什么/ 用起来舒服吗?

    显然,使用您最熟悉的工具往往更有意义。

    作为最后一点,请考虑仅仅因为可以使用钻头切割石板或因为可以使用锤子来驱动螺钉,并不意味着它们应该用于这些事情。有时我认为程序员试图制造更强大的工具来完成所有事情,而不是制造更简单的工具来真正、非常好地完成一件事,从而造成更大的潜在损害。

    【讨论】:

    • 所有有效积分。但我真正要理解的部分是,如果在 DB 级别应用商业逻辑是一个坏主意,为什么我们会在世界上看到这么多高薪和备受追捧的 DBA?
    【解决方案5】:

    一个出色的 PHP 应用程序应该是足够的,但请记住,它还要求您尽可能减少对数据库的调用。在 PHP 中存储您稍后需要的值、缩短查询、缓存等。

    MySQL 优化始终是必须的,因为它也会减少 PHP 的数据库调用量,从而获得更好的性能。因此,如果您的目标是提高性能,就不可能不考虑存储过程等。但是如果你的 PHP 代码做得不好(很多不必要的数据库调用),那么 MySQL 本身是不够的,这就是为什么我认为 PHP 必须编码好,在开发它时要记住漏洞过程,这样不必要的东西不碍事。例如,在“二重奏”中使用适当的 MySQL 缓存可以极大地提高性能。

    【讨论】:

    • 您能否用一些专门回答可扩展性问题的个人经验和/或统计数据来支持这一点?
    【解决方案6】:

    我的观点,即使没有太多开发大型应用程序的经验,也是出于某些原因在数据库中编写业务逻辑:

    1 - 可维护性,我认为语言会在短时间内弃用功能并更改许多其他内容,因此如果 PHP 更改版本,您需要使代码适应新版本

    2 - DB 往往语言更稳定,因此当 RDBMS 的新版本问世时,它通常不会改变您编写查询或 SP 的方式,甚至不会改变。由于新的 DB 版本,在 DB 中编写逻辑会减少代码适应

    3 - RDBMS 更有可能存活很长时间,而不是编程语言。此外,由于您的数据至关重要,RDBMS 开发人员非常担心将整个数据自动迁移到新的 RDBMS 版本,包括您的 SP。 Clipper 死后,无法将系统迁移到新的编程语言,它们必须完全重写。

    4 - 如果您想有一天出于某种原因(例如语言死亡)彻底改变您正在编写应用程序的语言,那么唯一需要重写的将是表示和 SP 调用,而不是业务逻辑。

    我想从这里的其他人那里知道我所指出的是否有道理,如果没有,为什么。我和 Sabeen Malik 处于同样的境地,我正在考虑开始我的第一个大型项目,并且由于我写的内容,我倾向于使用 SP。因此,如果我的 POV 不那么正确,是时候纠正它了。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • “MySQL 不擅长使用先进的数据库技术”……这是一个大胆的说法,你能提供一些统计数据或例子吗? ...当你说“通常使用 PHP 是有意义的”时......你能告诉我什么时候不使用 PHP 有意义吗?
      • “高级数据库技术”是什么意思? MySQL 不提供哪些高级数据库技术?
      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2012-04-09
      • 2012-02-09
      相关资源
      最近更新 更多