【问题标题】:Which is better in terms of speed php or plpgsql? [closed]在速度 php 或 plpgsql 方面哪个更好? [关闭]
【发布时间】:2014-03-24 09:06:28
【问题描述】:

我正在使用 php 5.3 和 postgresql 9.1

目前,我正在通过从数据库中获取数据并处理数据并最终在数据库中插入/更新/删除,在 PHP 中的“外部”数据库中进行数据库工作,但是随着我越来越习惯使用 postgresql 函数,我已经开始编码plpgsql。

现在,我想知道两者之间是否有任何速度差异,或者我可以使用任何我觉得舒服的。

此外,更高版本的答案是否相同 => php 5.5 和 postgresql 9.3

【问题讨论】:

  • 这完全取决于你实际做什么。你能给我们看看代码吗?
  • 我想我会因为发布这个答案而被否决,所以这里是:“这取决于!”
  • 主要是获取数据的计算部分,根据特定条件对数据进行不同类型的计算,然后插入/更新到数据库。
  • @feeela 请详细说明它将取决于什么。即使是一般性的想法也会对我有所帮助。
  • 这取决于您的应用程序在将业务逻辑外包给 DBMS 时依赖特定的 DBMS 是否是个好主意。它还取决于您正在执行的任务。简单的字符串操作或过多的数据计算。它还取决于您对 PHP 与 plpgsql 中的存储过程的了解。还有更多“这取决于”。未知因素太多——您的问题不够具体,无法为您提供有用的建议。

标签: php postgresql postgresql-9.1 plpgsql


【解决方案1】:

取决于你做什么。 PL/pgSQL 针对数据操作进行了优化 - PHP 针对 html 页面生成进行了优化。一些背景技术是相似的——基本结构的速度是相似的——PHP 在字符串操作方面明显更快,但是 PLpgSQL 运行在与 PostgreSQL 数据库引擎相同的地址空间,并使用与 PostgreSQL 数据库引擎相同的数据类型,因此从零开销数据类型转换和进程间通信。

存储过程有强大的对手和强大的防御者——它是任何其他技术,如果你能很好地使用它,它可以完美地服务于小型、大型项目。它有利于分解——它自然地将应用程序划分为表示(交互)层和数据操作层。它对于以数据为中心的应用程序很重要,而对于以演示为中心的应用程序则不太重要。而反对者也同意,有时出于性能原因需要存储过程。

我不同意 kafsoksilo - 调试、单元测试、维护不是任何问题 - 当您了解这项技术时 - 您可以使用几乎所有您知道的工具。而且 plpgsql 语言是非常强大的(用于数据操作领域)语言 - 具有良好的诊断性、清晰易读的错误消息和最少的问题。

【讨论】:

  • 我的行动计划似乎是在 PHP 中处理来自前端的所有逻辑,并在处理后将最终输出发送到 PL/pgsql,其中与 DB 相关的“内务处理”(如果有的话)完成然后最终确定。所以数据库相关的东西我保留在 SP 和前端,随着我获得更多经验,我可以进行优化。 PHP 中的一个优点是(我只读过不知道它有多么有用)HHVM 通过将 PHP 代码解析为字节码来加速 PHP 代码,而在 PL 情况下,我猜它必须在 C 中 rewritten (我认为)
  • 取决于你做什么,瓶颈在哪里。 PLpgSQL 应该是 SQL 语句的粘合剂——然后 PLpgSQL 的开销是最小的。另一方面,当你想做一些更难的计算时,C 很有用。
  • 非常感谢您提供急需的提醒,这里的讨论给了我很多思考的食物并消除了很多困惑。
【解决方案2】:

Plpgsql 更快,因为您不必获取数据、处理它们然后提交新查询。所有的过程都是在内部完成的,而且它也是预编译的,这也提高了性能。

此外,当数据库位于远程服务器上而不是本地时,您将遇到网络往返延迟。有时网络往返延迟比整个脚本运行所需的时间要长。

例如,如果您需要在慢速网络上执行 10 个查询,使用 plpgsql 并只执行一个将是一个很大的改进。

如果你要执行的处理是获取大块数据,并输出真或假,那么plpgsql的增益会更大。

另一方面,使用 plpgsql 并将逻辑放入数据库中,会使您的项目更难调试、修复错误和单元测试。此外,将来更改 RDBMS 也会变得更加困难。

我的建议是在 php 中操作数据,并且仅当您出于安全或数据完整性原因想要隔离某些逻辑时使用一点 plpgsql,或者您想要调整项目以获得最佳性能(应该是第一次发布后的问题)。

【讨论】:

  • 您忘记了一个方面:在 DBMS 方面进行捕捉。如果多次执行相同的查询,postgres 的优势会更大。
  • @JohannesH。使用准备好的声明,您可以在客户端获得相同的好处。最重要的是事实,所以 plpgsql 和数据库引擎运行在同一个进程中。
  • 网络延迟绝对是一个需要牢记的点,IMO 认为处理原始点附近的数据更为重要。
猜你喜欢
  • 2012-06-04
  • 2012-04-19
  • 2011-03-19
  • 2011-01-05
  • 2010-11-24
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多