一般来说,哪个 Java ORM 被认为是性能最高的? [关闭]
Posted
技术标签:
【中文标题】一般来说,哪个 Java ORM 被认为是性能最高的? [关闭]【英文标题】:Which Java ORM is considered the most performant generally speaking? [closed] 【发布时间】:2010-04-21 17:50:27 【问题描述】:一般来说,哪种 Java ORM 被认为是性能最高的?
我意识到这可能意味着更少的功能,但只是想要一个想法。
【问题讨论】:
【参考方案1】:几年前,在我工作的地方,我们花了一些时间比较普通 JDBC、Hibernate、TOPLink 和 Weblogic CMP 在典型用例(获取、更新、连接获取、部分获取等)下的性能。与普通 JDBC 相比,Hibernate、TOPLink 或 Weblogic CMP 没有增加任何显着的开销。 Hibernate 有一个小的性能问题,但结果证明这是 Oracle 驱动程序中的一个错误(并且团队也实施了一种解决方法)。
话虽如此,我应该补充一点,让这些工具运行良好并非易事——人们应该对幕后发生的事情有很好的了解,并熟悉配置参数。此外,使用 ORM 很容易生成错误查询(例如 N+1 个问题)。
最终我们选择了 Hibernate,因为我们更喜欢它的编程模型(它非常非侵入性)并且因为它是免费的(就像啤酒一样)。
【讨论】:
您真的必须了解幕后发生的事情。使用“最好的”ORM 并好好使用它,你会得到糟糕的表现!【参考方案2】:定义性能? 您的操作所需的典型操作的性能最有意义,因此您可以定义持久层操作。 JDO 是最可配置的标准化 API,而 JPA 是最常用的(几乎没有机会对其进行调整)。 DataNucleus 两者都提供。 如果您有像 PolePosition 基准测试这样的操作,那么 DataNucleus 相对于竞争解决方案表现得非常好(调整所有);但该基准不一定执行您的典型操作。
【讨论】:
具有 PolePosition 基准的竞争解决方案的公开结果在哪里?谁调音的? 一位同事为 JPOX(在将名称更改为 DataNucleus - 2 年前)、Hibernate 3 和 Kodo 运行它们并将结果放在 jpox.org/servlet/wiki/display/ENG/Polepos 认为他将输入用于 JPOX SVN (在 SourceForge 上)。 我检查了 PolePosition 基准测试并且:1. 它不是一个独立的基准测试(由 db4o 的人创建)2. Hibernate 显然没有优化(我什至可以说是 deoptmized) 3. 任何供应商都可以找到一个有偏见的基准,他的产品看起来比竞争产品“更好”。也就是说,在我眼里根本不可信。 任何开源的基准测试都可以接受审查,创建它是一项有价值的活动,不仅仅是被批评。任何人都可以优化特定的持久性解决方案并运行它;你不能。正如已经对海报所说的那样,他们应该找到代表其应用程序的可基准操作并使用它; PolePos 是否包含此类操作由发布者决定。 我已经在生产环境中使用 Hibernate(命名)运行了几个大到大的应用程序,并且没有一个遇到 PolePosition 基准中列出的假设问题。声称 Hibernate 已调整只是一个谎言,这就是我的观点。而且我没有时间浪费在有缺陷的基准测试上,正如我所说,Hibernate 对我来说表现非常好,正如 I 运行的基准测试所证明的那样。【参考方案3】:Ujorm claims 是性能最高的。 老实说,我以前从未听说过它,Google 刚刚弹出它。
无论如何,这取决于环境和功能要求。测量就是知道。我没想到差异会如此之大。所有自尊的 ORM 框架和实现都可以调到极致。毕竟,比起晦涩难懂的 API 和性能,我更喜欢已知、清晰和简洁的 API。到目前为止,JPA(2) 在这方面表现出色。
【讨论】:
【参考方案4】:我会投票支持 Hibernate 作为 Java 最流行的 ORM。它表现良好并且相当成熟。我会提醒您考虑其他问题可能会掩盖 ORM 性能问题。也就是说,如果您正确配置和使用它,ORM 通常不会成为您的瓶颈。
【讨论】:
【参考方案5】:你的问题的问题是“一般来说”。没有这样的东西,没有“general”应用程序。每个应用程序都有自己的对象模型和请求,使用一个特定 ORM 获得的性能不一定可以转置到另一个应用程序(换句话说,另一个应用程序可能会在另一个 ORM 解决方案中表现更好)。
因此,如果您想找到问题的答案,请在您的应用程序上设置各种 ORM。如果您使用 JPA 并且不使用专有扩展,这并不难做到(请注意,更改 JPA 提供程序并不妨碍您调整它)。将需要更多的努力来包含其他 ORM 解决方案。
【讨论】:
【参考方案6】:Hibernate 是迄今为止最受欢迎的选项。当需要一个非常大的社区的支持时,这特别好。然而,它也有它的缺点——比如批量插入。这实际上取决于您要做什么以及需要什么样的性能。一般来说,Hibernate 非常快。
【讨论】:
以上是关于一般来说,哪个 Java ORM 被认为是性能最高的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
ORM + 关系数据库可以被认为是对象关系数据库管理系统吗?
你好,我的电脑3d设置里面有高性能nvidia和niidia gpu,请问,哪个玩游戏最高,有区别么