Postgres pl / java警告

时间:2014-06-25 10:38:48

标签: postgresql plpgsql pljava

我非常希望用Java编写数据库端代码,但是想知道这样做与pl / pgsql相比是否有任何缺点(特别是性能和错误处理相关)。

2 个答案:

答案 0 :(得分:4)

至于我的expirience pl / java有一些主要问题:

  1. 很难将其安装到postgresql服务器中。即使您发现postgresql版本的二进制版本(这也很难) - 它需要一些配置和库路径杂耍。
  2. 首先调用java存储过程将导致新的JVM进程。 JVM进程是连接范围的,并且需要一定量的内存用于Java堆,因此如果使用连接池,最终会有大量时间启动和未使用的10-20个JVM,消耗服务器RAM
  3. pl / java可以使用自制的JDBC驱动程序与postgresql数据库进行通信,该驱动程序模拟常见的JDBC使用情况,但是有些实现问题可能让您大吃一惊。特别是如果你想使用JDBC cusrors或其他不那么常见的东西。
  4. pl / java logging非常特别 - 因为postgresql内部错误处理实现。例如 - 如果您在ERROR日志级别使用java logging api记录某些内容 - 它将终止您的服务器连接。
  5. 与基于应用程序服务器的java逻辑相比,pl / java具有非常好的数据处理性能,但它完全不可扩展 - pl / java程序完全是单线程的 - postgresql禁止多线程程序
  6. 如果您使用内部JDBC驱动程序并且您的SQL语句包含错误 - 您将在postgresql日志中收到神秘的错误消息 - 与真正的问题完全无关。
  7. 结果 - 您可以使用pl / java程序取得一些成功,但是您需要非常小心地完成它,并且您可能需要考虑改进应用程序设计。

答案 1 :(得分:3)

通常唯一的主要区别在于往返。如果您的Java代码与数据库具有低延迟连接,您应该发现客户端逻辑可以很好地执行。

更新:Ian说你的意思是PL / Java,即数据库内执行。如果这就是你的意思,我会推荐PL / Java。它几乎没有维护;此外,Java模型(线程繁重,昂贵的大型启动)并不是PostgreSQL的最佳匹配(进程不是线程,非常轻量级的启动)。

让人们将工作交给PL / Java会很棒,但现在还没有发生太多事情。