Hibernate在读写方面的性能

时间:2012-08-08 09:47:09

标签: java performance hibernate database-performance cpu-cache

hibernate如何在读写方面起作用:

  1. 如果应用程序对DB执行更多写操作,hibernate如何工作? 在这种情况下,我知道每次写入都必须刷新缓存,除了这是任何性能开销(与JDBC相比)

  2. 如果应用程序只读取数据(非常少写/更新),hibernate如何工作? 在这种情况下,由于不需要刷新缓存,我们可以期望hibernate的性能与JDBC一样好(或更好)(如果正确调整)。

  3. 另外,想要了解case2中使用的最佳选项(除了ORM)。

2 个答案:

答案 0 :(得分:1)

添加额外的图层总是性能较差。但是,这个额外的层有时也会缩短开发时间。所以这一切都取决于您的用例和性能要求。如果您使用ORM,那么您可以为读取和查询启用二级缓存,这就是您的应用程序级性能。但有时本机数据库缓存已足够(这样集群中的每个节点都可以避免缓存)。

答案 1 :(得分:1)

Hibernate是一种可以使开发更容易的工具。我觉得(根据我自己的经验)Hibernate的开销并不是很大。您最终可能会将自己的sql结果写入对象映射。如果你很好的话,它可能比Hibernate快得多。但是:

  • Hibernate在会话中执行L1缓存,因此您无需记住是否从DB获取数据
  • Hibernate性能调优比JDBC容易得多 - 只需在实时应用程序上插入Javamelody,然后查找最慢的SQL,然后使用热切和延迟加载来加快速度。不需要SQL重写也不需要触摸映射代码。你只需要调整一些注释
  • L2缓存非常简单。有时DB缓存可以解决问题,但它有其局限性。在Hibernate中,您可以启用关系缓存​​和查询缓存。当DB是瓶颈并且您的应用程序部署在多个节点上时,您将看到差异。分布式缓存比数据库数千次快得多。

总而言之,是的,Hibernate有它的开销,但对我来说,调优能力是非常重要的,并且在复杂的应用程序中使用Hibernate比使用普通JDBC有更好的性能(而且非常可能)。我不需要说开发Hibernate和QueryDSL比使用普通JDBC更快。