【问题标题】:Stored database procedures [closed]存储数据库过程[关闭]
【发布时间】:2013-03-12 08:24:57
【问题描述】:

我正在使用php和pdo,有人告诉我,如果我在数据库中使用程序,我的程序会大大提高。

我想知道关于以下几点可以提供程序的改进:

  • 请求速度。
  • 安全方面。 (程序和数据库)。
  • 可扩展性。
  • 盈利能力。
  • 什么时候方便,什么时候不方便。
  • 其他好坏之分。

还想知道是否可以使用 PDO 参数化查询调用过程。

我很欣赏关于该主题的任何类型的材料(书籍、教程、代码片段、评论)。

【问题讨论】:

    标签: php sql stored-procedures pdo


    【解决方案1】:

    在决定程序的哪个部分在哪里执行时,这是个好问题。我在使用 Classic ASP 和 MS SQL Server 编写应用程序时遇到了类似的问题。

    在回答您的问题之前,我想指出一个网络应用程序至少有三层:

    • 表示层,例如客户端的网络浏览器
    • 应用层 - 运行 PHP、JSP 或 ASP 服务器的地方
    • 以及数据所在的数据库层。

    常识是,无论可以在表示层执行什么数据验证,我们都会将其放在那里。例如,检查某个表单字段是否为空。

    当应用程序必须在其他两个层(应用程序层和数据库层)开发时,这很有趣。许多糟糕的程序员编写代码的方式是在 Web 服务器和 DB 服务器之间为非常小的事情进行多次往返。我们应该考虑在这些时候在数据库中编写存储过程。

    关于你提到的几点,我想回答一下:

    • 请求速度。

      向您的网络服务器发出的请求处理得更快,因为网络服务器和数据库服务器之间的往返次数更少。当您的应用程序变得非常复杂并且数据变得太大(以数百 TB 计)时,这种差异尤其显着。处理负载从您的 Web 服务器转移到您的 DB 服务器,因此您的 Web 服务器更适合您的客户端请求。

    • 安全方面。 (程序和数据库)。

      现在为您的程序提供的安全性分为两个级别 - Web 服务器级别和数据库级别。您可以对这两者之间的通信进行限制,以确保您的程序不会崩溃并且数据完好无损。

    • 可扩展性。

      Web 服务器代码和数据库服务器代码现在位于两个不同的层。两个层都可以根据需要独立扩展。阅读here 了解可扩展性的确切含义。

    • 盈利能力。

      我不知道如何回答这个问题,但我突然想到一个想法:如果您要为数据库服务器付费并让它在 Web 服务器超载时闲置,那有什么意义呢?如果我为数据库服务器付费,我会充分利用它,给它一些我的 Web 服务器所具有的处理负载。

    • 什么时候方便,什么时候不方便。

      当 Web 和数据库服务器之间的往返次数过多时使用它最方便。我可能会一次又一次地提到这一点,但事实证明这个问题令人头疼。

      什么时候不方便?好吧,在简单的情况下,一条 SQL 语句就可以完成所有必要的工作。

    • 其他好坏之分。

      • 您必须确定这两层之间的通信 - 传递的内容和接收的内容。妥善记录所有内容,因为任何错误都会妨碍这两个层级。

    【讨论】:

    • 完美答案。您以完美的方式涵盖了问题的所有要点。非常感谢!
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2014-07-17
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多