Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php和plpgsql的速度哪一个更好?_Php_Postgresql_Postgresql 9.1_Plpgsql - Fatal编程技术网

php和plpgsql的速度哪一个更好?

php和plpgsql的速度哪一个更好?,php,postgresql,postgresql-9.1,plpgsql,Php,Postgresql,Postgresql 9.1,Plpgsql,我正在使用PHP5.3和postgresql 9.1 目前,我在PHP中“在”DB之外进行DB工作,从DB中提取数据并处理数据,最后在DB中插入/更新/删除,但随着我逐渐熟悉postgresql函数,我开始使用plpgsql进行编码 现在,我想知道两者之间有没有速度上的差异,或者我可以使用哪一种我能适应的速度 此外,对于更高版本=>PHP5.5和postgresql 9.3,答案是否相同?Plpgsql更快,因为您不必获取数据、处理数据,然后提交新的查询。所有的过程都是在内部完成的,并且也是预编

我正在使用PHP5.3和postgresql 9.1

目前,我在PHP中“在”DB之外进行DB工作,从DB中提取数据并处理数据,最后在DB中插入/更新/删除,但随着我逐渐熟悉postgresql函数,我开始使用plpgsql进行编码

现在,我想知道两者之间有没有速度上的差异,或者我可以使用哪一种我能适应的速度


此外,对于更高版本=>PHP5.5和postgresql 9.3,答案是否相同?Plpgsql更快,因为您不必获取数据、处理数据,然后提交新的查询。所有的过程都是在内部完成的,并且也是预编译的,这也提高了性能

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

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

如果您要执行的处理是获取大块数据,并输出true或false,那么plpgsql增益将更大

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


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

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

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


我不同意kafsoksilo的观点——调试、单元测试和维护都不是问题——当你了解这项技术时——你几乎可以使用你所知道的所有工具。plpgsql语言是一种非常强大的(用于数据操作领域)语言,有很好的文档记录,具有良好的诊断、清晰可读的错误消息和最小的问题。

这完全取决于您实际执行的操作。你能给我们看一下代码吗?我想我会因为把它作为一个答案而被否决,所以这里的答案是:“这取决于!”大多数情况下,数据提取的计算部分,根据某些条件对数据进行不同类型的计算,然后插入/更新到DB。@feeela请详细说明它将取决于什么。即使是一个大致的想法也会对我有所帮助。这取决于当将业务逻辑外包给DBMS时,应用程序依赖特定的DBMS是否是一个好主意。这也取决于你正在做的任务。简单的字符串操作或过多的数据计算。这还取决于您对PHP与plpgsql中存储过程的了解。还有更多的“视情况而定”。有太多的未知因素–您的问题不够具体,无法给您提供有用的建议。您忘记了一个方面:在DBMS端捕获。如果同一查询被多次执行,postgres的优势将更大。@JohannesH。通过准备好的报表,您可以在客户端获得同样的好处。最重要的是事实,所以plpgsql和数据库引擎运行在同一个进程中。网络延迟绝对是需要记住的一点,IMO认为在原点附近处理数据更重要。我的行动计划似乎是在PHP中处理前端的所有逻辑,并在处理后将最终输出发送到PL/pgsql,在那里完成与数据库相关的“内务管理”,然后最终确定。所以我把DB相关的东西放在SP和前端,随着我获得更多的经验,我可以进行优化。PHP中的一个有利点是(我只知道它有多有用)HHVM,它通过将PHP代码解析为字节码来加速PHP代码,而在PL情况下,我猜它必须用C重写(我认为)取决于您做什么,瓶颈在哪里。PLpgSQL应该是SQL语句的粘合剂,这样PLpgSQL的开销就最小了。另一方面,当你想做一些更难的计算时,C是有用的。非常感谢你提供了非常需要的提示,这里的讨论给了我很多思考的食物,也消除了很多困惑。