我们的数据库(PostgreSQL 9.x)中有一些 PL/pgSQL 存储过程。
这些是严格顺序的,在某些情况下,可能非常慢。
我们正在考虑将这些移植到 PL/Java、PL/Python 或类似的东西上,并利用这些语言的多线程能力。
主要问题是:如何“有效”地实现这些语言支持?例如,我正在考虑运行 Java 代码的虚拟机:当调用我的 PL/Java 代码时,每次它都会为它召唤一个新的 VM,或者 PL/Java 是否保留某种 VM 池,并关联一个其中的实际通话?
我们的数据库(PostgreSQL 9.x)中有一些 PL/pgSQL 存储过程。
这些是严格顺序的,在某些情况下,可能非常慢。
我们正在考虑将这些移植到 PL/Java、PL/Python 或类似的东西上,并利用这些语言的多线程能力。
主要问题是:如何“有效”地实现这些语言支持?例如,我正在考虑运行 Java 代码的虚拟机:当调用我的 PL/Java 代码时,每次它都会为它召唤一个新的 VM,或者 PL/Java 是否保留某种 VM 池,并关联一个其中的实际通话?
Pl/Java 在 postgres 后端进程中嵌入的 jvm 中运行。参见:PL/Java 维基
我建议您不要在不首先查看纯 SQL 解决方案的情况下将所有内容都转换为 java。在许多情况下,SQL 批量处理大量记录的能力将超过单独处理记录的任何好处,但会导致更多的 SQL 调用。
如果任务本质上是顺序的,Java 的多线程功能不会带来好处。