Hibernate性能

Tio*_*oma 12 java performance hibernate

我有疑问,也许是某个人认为是愚蠢的.Hibernate快吗?我在系统中使用它,它对数据库的查询数量非常大.并且性能变得警觉.关于当前背景的其他问题.什么会更好 - 许多简单的查询(使用单个表)或少几个JOIN查询?

提前Artem的坦克

Uri*_*ter 16

根据我们的经验,Hibernate可以非常快.但是,ORM工具可能存在许多陷阱,包括:

  • 延迟加载不正确,选择的数据太多或太少
  • N + 1选择问题,其中迭代集合的速度很慢
  • List应该避免收集并且更喜欢,Set因此订购信息不需要包括在表中
  • 批处理操作,最好回退到直接SQL

Hibernate文档中的" 改进性能"页面是开始了解这些问题以及其他提高性能的方法的好地方.


小智 13

首先,你可以做很多事情来加速Hibernate.查看这些高性能休眠技巧文章,了解可以加快数据访问层速度的全面列表.

使用"很多"查询,您将遇到典型的N + 1查询问题.您使用Hibernate加载实体,该实体具有相关对象.使用LAZY加入,您将获得每条记录的单个查询.每个查询通过网络到达数据库服务器,并返回数据.这都需要时间(打开连接,网络延迟,查找,数据吞吐量等).

对于单个查询(具有联接),查找和数据吞吐量大于多个查询.但是,您只需打开一次连接和网络延迟.因此,对于100个或更多查询,您具有较小的查找和数据吞吐量,但您将拥有100次(包括打开连接和网络延迟).

一个需要20ms的查询.vs 100个需要1ms的查询.你做数学;)

如果它可以增长到1000的记录.单个查询会对性能产生很小的影响,但1000个查询与100个查询相比要高出10倍.因此,对于多个查询,您将大大降低性能.

使用HQL查询检索数据时,可以将FETCH添加到JOIN,以便使用相同的查询加载数据(使用JOIN).

有关此主题的更多信息,请查看此Hibernate性能调优教程.