有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate在读写方面的性能

hibernate在读写方面是如何工作的:

  1. 如果应用程序对数据库进行更多写入,hibernate如何工作? 在这种情况下,我知道每次写入都必须刷新缓存,除了这一点之外,还有任何性能开销(与JDBC相比)

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

另外,想了解在案例2中使用的最佳选项(除了ORM)


共 (2) 个答案

  1. # 1 楼答案

    Hibernate是一种可能使开发更容易的工具。我觉得(根据我自己的经验)休眠开销不是很大。您可能最终会编写自己的sql结果到对象映射。如果你做得好的话,它可能比Hibernate快一点。然而:

    • Hibernate在会话中进行L1缓存,所以您不需要记住是否从DB获取了数据
    • Hibernate性能调试比JDBC容易得多——只需在live应用程序上插入Javamelody,寻找最慢的SQL,然后使用渴望和懒惰的加载来加快速度。不需要SQL重写,也不需要接触映射代码。您只需要调整一些注释
    • 二级缓存非常简单。有时候DB缓存可以做到这一点,但也有其局限性。在Hibernate中,可以启用关系缓存和查询缓存。当DB成为瓶颈并且应用程序部署在多个节点上时,您将看到不同之处。分布式缓存将比数千次命中DB快得多

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

  2. # 2 楼答案

    添加一个额外的层总是性能较差。然而,这个额外的层有时也会减少开发时间。因此,这完全取决于您的用例和性能需求。如果您使用ORM,那么您可以为读取和查询启用二级缓存,这就是您的应用程序级性能。但有时本机DB缓存就足够了(这样集群中的每个节点都可以避免缓存)