休眠和 JDBC 性能?[已关闭]

2022-09-04 19:54:02

目前,我正在将我的Java Web应用程序从JDBC切换到Hibernate,在我当前使用JDBC的实现中,我将应用程序初始化为静态变量时加载静态数据,因此我不必每次需要一些静态数据时直接访问数据库,现在切换到休眠,我正在考虑摆脱这些静态变量,因为我研究了hibernate将加载的数据保存在缓存中。

我对休眠相当陌生,所以我不确定从我当前的方法切换到休眠是否会带来任何性能改进。我将进一步研究休眠缓存并运行一些性能测试,以查看哪种方法更好,但只想就其他人对这两种方法的性能的看法发表一些意见。

谢谢。


答案 1

对于大多数数据库供应商来说,与Hibernate相比,JDBC将始终提供更好的性能。您可以检查以下链接中给出的比较。他的结论是,当查询行较少的表时,Hibernate的速度很快,否则JDBC会更好:
http://phpdao.com/hibernate_vs_jdbc/

另一个好的性能统计数据可以在Hibernate论坛的讨论中找到 https://forum.hibernate.org/viewtopic.php?f=1&t=931708

它指出了由于使用Hibernate而造成的以下性能损失顺序(请注意,这可以通过根据自己的需求调整Hibernate来改善):

Objects: 8 - Hibernate: 10ms / Direct JDBC: 10ms = Ratio: 1.0 
Objects: 16 - Hibernate: 10ms / Direct JDBC: 0ms = Ratio: Infinity 
Objects: 64 - Hibernate: 20ms / Direct JDBC: 10ms = Ratio: 2.0 
Objects: 256 - Hibernate: 150ms / Direct JDBC: 30ms = Ratio: 5.0 
Objects: 512 - Hibernate: 210ms / Direct JDBC: 40ms = Ratio: 5.25 
Objects: 1024 - Hibernate: 410ms / Direct JDBC: 70ms = Ratio: 5.857143 
Objects: 2048 - Hibernate: 681ms / Direct JDBC: 180ms = Ratio: 3.7833333


选择Hibernate而不是JDBC和SQL查询不是因为性能,而是因为主要是因为对象持久性数据库独立性的原因,即不编写特定于数据库的查询。您可以阅读以下 PDF 指南以获得更好的视图:


答案 2

对于您的特定情况,我建议创建您自己的对象,该对象将保持所需的静态值。您可以在应用程序初始化期间或首次请求该数据时填充它。

至于比较性能,最好的情况是,基于Hibernate的数据访问层的性能与JDBC一样好,或者性能降级不会影响整体用户体验。休眠用于加速开发并增强可维护性,而不是获得优于JDBC的性能优势。


推荐