PostgreSQL 中不同语言的性能/兼容性有啥不同吗?
Posted
技术标签:
【中文标题】PostgreSQL 中不同语言的性能/兼容性有啥不同吗?【英文标题】:Any difference in performance/compatibility of different languages in PostgreSQL?PostgreSQL 中不同语言的性能/兼容性有什么不同吗? 【发布时间】:2010-12-25 23:59:21 【问题描述】:现在的 PostgreSQL offers plenty of procedural languages: pl/pgsql, pl/perl, etc
用不同语言编写的程序在速度/内存消耗上有什么不同吗?
有人做过测试吗?
使用原生的pl/pgsql真的是最正确的选择吗?
用 C++ 编写并编译为可加载模块的过程在所有参数 w.r.t 方面有何不同。用 pl/* 语言编写的用户函数?
【问题讨论】:
我会对 python 的相同答案感兴趣。 我真的不明白你的问题是如何有效地回答的。当然,这些语言及其实现也存在速度/内存消耗的差异。我个人使用 plpythonu 只是因为我使用 python。如果它的运行速度是 pl/perl 的两倍,我可以不在乎,只要它运行得足够快。主要好处是它提供了我已经在使用的库。 我看到了 Nate,但是如果你有一个运行 5 秒的程序,而使用另一种语言它运行 10 秒,那么在第二种情况下,你需要重新考虑你的数据库结构,因为 5 秒是可以接受,但在现实生活中不是 10。 【参考方案1】:正确的选择取决于你要做什么。
根据我的经验,pl/pgsql 的开销比说 pl/perl、pl/python 或 pl/tcl 的开销要少,如果您想要做的事情很容易在 pl/pgsql 中表达。例如,如果您正在执行数据库操作。然而,如果你做一些 perl 擅长的事情——比如字符串处理,你为 pl/perl 支付的开销很快就会回来。
在这些情况下,您必须考虑的一件事是,像 perl 和 python 这样的“更大”语言的启动成本明显高于 pl/pgsql - 但可以通过使用持久连接轻松缓解。
用 C 编写的函数几乎肯定会更快 - 如果您可以编写擅长使用小内存的代码,它们将使用更少的内存。但是,听说编写和维护它们通常比 PL 差 很多 - 特别是构造和解构元组将花费比您在任何类型的复杂函数中想象的更多的代码。
由于 JVM 开销,我发现唯一比其他语言慢得多的 PL 样式语言是 pl/java。但我相信您可以找到解决某些问题的速度更快的情况。
如果您想确定在您的场景中什么是绝对最有效的,您需要为每种语言开发几个函数,然后对它们进行基准测试。但很可能这并不重要,您可以从开发角度而不是性能角度选择最适合任务的语言。
【讨论】:
“但很可能这并不重要,您可以从开发角度而不是性能角度选择最适合任务的语言。”是的。与出于性能原因选择平台有关的大多数编程问题一样,大多数情况下,选择开发人员更喜欢的平台并将硬件置于性能缺陷中可以获得更多收益。以上是关于PostgreSQL 中不同语言的性能/兼容性有啥不同吗?的主要内容,如果未能解决你的问题,请参考以下文章