【问题标题】:Find by primary key with Hibernate/JPA vs JDBC使用 Hibernate/JPA 与 JDBC 按主键查找
【发布时间】:2014-01-29 07:55:22
【问题描述】:

我正在两个应用程序之间进行基准测试,一个使用JPA 2/Hibernate 4 构建,另一个使用JDBC 构建。总的来说,差异不是太大(小于一个数量级)。唯一的例外是当我通过主键获取记录时。
使用 JDBC 的时间低于 10 毫秒,使用 Hibernate 的时间从不低于 60 毫秒。 我已经安装了 ehcache,但对于这个特定的查询,差异保持不变。
有没有我遗漏的技巧或技巧?

---已编辑

JPA 映射和类是使用 Hibernate 工具构建的,它们没有什么特别之处。 JDBC 从 Oracle 恢复 PL/SQL 对象(正如我在其他基准测试中测试的那样,它比恢复原始数据要慢)。

当测试的复杂性增加时,两种技术之间的比较变得更加均匀,最终 Hibernate/JPA 更适合某些测试(例如恢复大量复杂对象)。

关键是我无法使用 Hibernate/JPA 进行任何耗时少于 60 毫秒的操作。似乎 Hibernate/JPA 花费最少的时间来执行最便宜的事务(在这种情况下,通过它的 PK 恢复记录)。有什么办法可以减少这个时间?

【问题讨论】:

  • 你能添加一个简单的例子(一个bean定义,一个创建脚本表......)?
  • Bean 定义由 Hibernate Tools 创建
  • 请添加一个bean定义和相关的脚本表
  • 我必须建立一些模拟。我会尽快做的。
  • 对您的测试进行更好的描述也是有必要的,因为 JDBC 只返回原始数据,而 JPA 必须从相同的数据构建实体。

标签: hibernate jpa jdbc


【解决方案1】:

除了检查经过的时间之外,您还可以分析执行情况,以查看 Hibernate 在此期间做了什么。你会检查我说的@Andrei。由于对象实例化和反射操作,大部分开销很可能发生。由于 id 搜索将返回较少的数据,因此 Hibernate 开销可能会更明显。

【讨论】:

  • 好的,但是你知道如何减少开销吗?
  • 你可能做不到。也许您可以启用一些缓存来避免数据库交互,但这可能会被视为作弊。这是使用 JPA/Hibernate 的折衷方案:您将获得一个强大的工具、生产力和可维护性的加成,以换取一些性能加成。我曾经说过,它可以让您将精力集中在业务和关键性能点上,而不是过度优化每个查询。
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 2017-07-17
  • 2013-01-11
  • 2011-02-18
  • 2012-09-02
  • 2010-09-20
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多