【发布时间】:2010-04-21 17:50:27
【问题描述】:
一般来说,哪种 Java ORM 被认为是性能最高的?
我意识到这可能意味着更少的功能,但只是想要一个想法。
【问题讨论】:
一般来说,哪种 Java ORM 被认为是性能最高的?
我意识到这可能意味着更少的功能,但只是想要一个想法。
【问题讨论】:
几年前,在我工作的地方,我们花了一些时间比较普通 JDBC、Hibernate、TOPLink 和 Weblogic CMP 在典型用例(获取、更新、连接获取、部分获取等)下的性能。与普通 JDBC 相比,Hibernate、TOPLink 或 Weblogic CMP 没有增加任何显着的开销。 Hibernate 有一个小的性能问题,但结果证明这是 Oracle 驱动程序中的一个错误(并且团队也实施了一种解决方法)。
话虽如此,我应该补充一点,让这些工具运行良好并非易事——人们应该对幕后发生的事情有很好的了解,并熟悉配置参数。此外,使用 ORM 很容易生成错误查询(例如 N+1 个问题)。
最终我们选择了 Hibernate,因为我们更喜欢它的编程模型(它非常非侵入性)并且因为它是免费的(就像啤酒一样)。
【讨论】:
定义性能? 您的操作所需的典型操作的性能最有意义,因此您可以定义持久层操作。 JDO 是最可配置的标准化 API,而 JPA 是最常用的(几乎没有机会对其进行调整)。 DataNucleus 两者都提供。 如果您有像 PolePosition 基准测试这样的操作,那么 DataNucleus 相对于竞争解决方案表现得非常好(调整所有);但该基准不一定执行您的典型操作。
【讨论】:
我会投票支持 Hibernate 作为 Java 最流行的 ORM。它表现良好并且相当成熟。我会提醒您考虑其他问题可能会掩盖 ORM 性能问题。也就是说,如果您正确配置和使用它,ORM 通常不会成为您的瓶颈。
【讨论】:
你的问题的问题是“一般来说”。没有这样的东西,没有“general”应用程序。每个应用程序都有自己的对象模型和请求,使用一个特定 ORM 获得的性能不一定可以转置到另一个应用程序(换句话说,另一个应用程序可能会在另一个 ORM 解决方案中表现更好)。
因此,如果您想找到问题的答案,请在您的应用程序上设置各种 ORM。如果您使用 JPA 并且不使用专有扩展,这并不难做到(请注意,更改 JPA 提供程序并不妨碍您调整它)。将需要更多的努力来包含其他 ORM 解决方案。
【讨论】:
Hibernate 是迄今为止最受欢迎的选项。当需要一个非常大的社区的支持时,这特别好。然而,它也有它的缺点——比如批量插入。这实际上取决于您要做什么以及需要什么样的性能。一般来说,Hibernate 非常快。
【讨论】: