【问题标题】:plv8 disadvantages or limitations?plv8的缺点或限制?
【发布时间】:2015-09-02 19:06:34
【问题描述】:

我正在使用 PLV8 为 PostgreSQL 编写触发器和存储过程。到目前为止,与 PLPGSQL 相比,我并没有真正看到缺点。特别是如果使用 JSON,它似乎比 PLPGSQL 更聪明。如果使用 PLV8,是否存在已知的缺点或限制? PLV8 能否完全替代 PLPGSQL?如果有人能分享他在这方面的经验,那就太好了。

【问题讨论】:

  • 我能看到的唯一(非常小的)缺点:您明确需要为您创建的每个数据库安装它。默认情况下,PL/pgSQL 始终可用。但只有可以决定它是否完全替代:因为这完全取决于您对语言的要求。
  • 谢谢。我问是因为我想知道是否有我目前没有考虑的问题。如果我今天决定将 PLV8 用于一个新项目,并且在 3 个月后我必须了解存在限制,那就太糟糕了。
  • plpgsql 原生使用 SQL 数据类型,这是其他 PL 所没有的易用性优势。如果您打算使用复杂的数据类型,例如hstoreltree,则必须在 plv8 中处理它们的文本表示。但是它支持数组,复合类型,setof,...已经很不错了。
  • 哦,谢谢,这是一个可能的点!

标签: postgresql plpgsql plv8


【解决方案1】:

PLV8的优缺点与PLPerl、PLPython等PL语言的优缺点相同。

  • 它没有与 PostgreSQL 引擎集成 - 处理 SQL 语句结果可能会更慢。 PLpgSQL 完全集成到 PostgreSQL 引擎中。
  • SQL 未集成到语言中 - 无法对嵌入式 SQL 进行静态分析。 PLpgSQL 可以实现 - 请参阅 plpgsql_check。
  • 可以进行更昂贵的数学计算,字符串和数组的操作通常比 PLpgSQL 更快。
  • 可以使用为语言开发的库 - Perl - CPAN,...
  • JavaScript、Perl、Python 是通用语言 - 因此任何通用任务都可以很好地实现。
  • PLpgSQL 是一种成熟的语言,专为在关系数据库环境中处理数据而设计。几乎所有开发人员处理数据所需的数据都在那里。迭代结果,从数据库中获取数据需要更少可读性的代码。

PLpgSQL 是通过 SQL 语言进行数据操作的完美语言。其他 PL 更适合其他任何事情 - IO、网络、特殊格式、缓慢的数字计算……

【讨论】:

  • 我不知道提到的那种分析,谢谢帕维尔。关于性能..我同时红了一些文章,并得到的印象是在“正常”情况下(例如典型的电子商务门户网站)只有非常非常小的性能差异。但可以肯定的是,也有特殊情况。所以,再次感谢!
  • 性能 - 这取决于 - 数据库大小、查询复杂性、返回结果集的大小,...
  • 如果我编写了一个函数,该函数循环超过 150000 行,一列 20-100 个单词来提取 plv8 函数中的标签,它会在桌子上运行时阻止其他人的执行吗?
  • @PirateApp - 这取决于你做什么。表不是数组。如果你只做读操作,那么你不会阻止任何其他用户。
【解决方案2】:

更新:由于 PLV8 2.3.3 (2018-04-27) 支持终止信号并且工作得很好。缺点 - 你必须自己构建它。我们没有将代码迁移到 python,因为过去 3 年没有任何问题。

有点晚了,但是你不能杀死当前运行 plv8 脚本的查询,唯一的办法是重启整个 postgresql 服务器。这是一个巨大的劣势,我们的团队正在考虑迁移到 PLpgPython。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2014-06-26
    • 1970-01-01
    • 2010-10-24
    • 2021-03-06
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多