我非常喜欢用 Java 编写 DB 端代码,但想知道这样做与 pl/pgsql 相比是否有任何缺点(尤其是与性能和错误处理相关的)。
1356 次
2 回答
4
根据我的经验,pl/java 有一些主要问题:
- 很难将它安装到 postgresql 服务器中。即使您为您的 postgresql 版本找到二进制构建(这也很困难) - 它需要一些配置和库路径杂耍。
- 第一次调用 java 存储过程将导致一个新的 JVM 进程。JVM 进程是连接范围的,并且需要一定量的内存用于 Java 堆,因此如果您使用连接池,您最终会启动 10-20 个 JVM,并且大部分时间都未使用,这会消耗您的服务器 RAM
- pl/java 可以使用自制的 JDBC 驱动程序与 postgresql 数据库通信,该驱动程序模拟了常见的 JDBC 用法,但有一些实现问题可能会让您感到惊讶。特别是如果您想使用 JDBC 光标或其他不常见的东西。
- pl/java 日志记录相当特殊——这是因为 postgresql 内部错误处理实现。例如 - 如果您在 ERROR 日志级别使用 java logging api 记录某些内容 - 它将终止您的服务器连接。
- pl/java 与基于应用程序服务器的 java 逻辑相比具有非常好的数据处理性能,但它完全不可扩展 - pl/java 程序是完全单线程的 - postgresql 禁止多线程程序
- 如果您使用内部 JDBC 驱动程序并且您的 SQL 语句包含错误 - 您最终会在 postgresql 日志中看到神秘的错误消息 - 与实际问题完全无关。
结果 - 您可以成功使用 pl/java 程序,但您需要非常小心地进行操作,并且可能需要考虑改进您的应用程序设计。
于 2014-06-25T11:22:37.780 回答
3
通常唯一的主要区别是往返。如果您的 Java 代码与 DB 的连接延迟较低,您应该会发现客户端逻辑执行得非常好。
更新:Ian 说您的意思是 PL/Java,即在数据库中执行。如果这就是你的意思,我不会推荐 PL/Java。它几乎无人维护;此外,Java 模型(线程繁重,启动成本高昂)与 PostgreSQL 模型(进程不是线程,非常轻量级的启动)不太匹配。
让人们致力于 PL/Java 会很棒,但现在并没有发生太多事情。
于 2014-06-25T11:06:20.437 回答