iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JDBC与Hibernate如何读取性能
  • 262
分享到

JDBC与Hibernate如何读取性能

2023-06-17 21:06:15 262人浏览 泡泡鱼
摘要

这篇文章主要介绍JDBC与Hibernate如何读取性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JDBC仍然是最快的访问方式,不论是Create还是Read操作,都是JDBC快。Hibernate使用uuid.

这篇文章主要介绍JDBC与Hibernate如何读取性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

JDBC仍然是最快的访问方式,不论是Create还是Read操作,都是JDBC快。

Hibernate使用uuid.hex构造主键,性能稍微有点损失,但是不大。

Create操作,JDBC在使用批处理的方式下速度比Hibernate快,使用批处理方式耗用JVM内存比不使用批处理方式要多得多。

读取数据,Hibernate Iterator速度非常缓慢,因为他是每次next的时候才去数据库取数据,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存是几十K几十K的增加。

读取数据,Hibernate List速度很快,因为他是一次性把数据取完,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存几乎是10M的10M的增加。

JDBC读取数据的方式和Hibernate的List方式是一样的(这跟JDBC驱动有很大关系,不同的JDBC驱动,结果会很不一样),这从观察java进程内存变化可以判断出来,由于JDBC不需要像Hibernate那样构造一堆Cat对象实例,所以占用JVM内存要比Hibernate的List方式大概少一半左右。

Hibernate Iterator方式并非一无是处,它适合于从大的结果集中选取少量的数据,即不需要占用很多内存,又可以迅速得到结果。另外Iterator适合于使用JCS缓冲。
最终结论:
由于MySQL的JDBC驱动的重大缺陷,使得测试结果变得毫无意义,不具备任何参考价值,只是我们能够大概判断出一些结论:

◆精心编写的JDBC无论如何都是最快的。
◆Hibernate List和Iterator适用的场合不同,不存在孰优孰劣的问题

我个人认为Hibernate Iterator是JDBC Result的封装,Hibernate List是Scrollable Result的封装,所以我推测,如果在oracle或者DB2上面做同样的Read测试,如果结果集小于FetchSize,4者在速度上应该都不会有差别;如果结果集大于FetchSize的话,但是不是FetchSize的很多倍,速度排名应该是:
JDBC Scrollable Result (消耗时间最少) < Hibernate List < JDBC Result < Hibernate Iterator

如果结果集非常大,但是只取结果集中的部分记录,那么速度排名:
JDBC Result < Hibernate Iterator < JDBC Scrollable Result < Hibernate List 为了避免造成误导,我***强调一下我的结论:

一、“精心编写”的JDBC一定是性能***的

实际上,不管CMP,Hibernate,JDO等等,所有的ORM都是对JDBC的封装,CMP则是一个重量级封装,JDO中度封装,Hibernate是轻量级的封装。从理论上来说,ORM永远也不可能比JDBC性能好。就像任何高级语言的运行性能永远也不会好过汇编语言一个道理。

对于Create和Update操作来说,由于普通的Java程序员未必会使用JDBC的Batch的功能,所以Hibernate会表现出超过JDBC的运行速度。

对于Read的操作来说,ORM普遍都会带有双层缓冲,即PrepreadStatement缓冲和ResultSet缓冲,而JDBC本身没有缓冲机制,在使用连接池的情况下,一些连接池将会提供PrepreadStatement缓冲,有的甚至提供ResultSet缓冲,但是普遍情况下,Java程序员一般都不会考虑到在写JDBC的时候优化缓冲,而且这样做也不太现实,所以在某些情况下,ORM会表现出超过JDBC的Read速度。

二、Hibernate List和Iterator方式的比较

这是我在测试中想要重点考察的方面,但是由于JDBC驱动问题,结果变的很不可信,不过仍然可以得到一些有用的结论。

Read操作包括两步:***步是把数据库的数据取出,构造结果集,把数据放入到结果集中;第二步是遍历结果集,取每行数据。

List方式是1次性把所有的数据全部取到内存中,构造一个超大的结果集,主要的时间开销是这一步,这一步的时间开销要远远超过JDBC和Iterator方式下构造结果集的时间开销,并且内存开销也很惊人;而对结果集的遍历操作,速度则是非常的惊人(从上面的测试结果来看,30万记录的内存遍历不到100ms,由于这一步不受JDBC影响,因此结果可信)。因此,List方式适合于对结果集进行反复多次操作的情况,例如分页显示,往后往前遍历,跳到***行,跳到***一行等等。

Iterator方式只取记录id到内存中,并没有把所有数据取到内存中,因此构造结果集的时间开销很小,比JDBC和List方式都要少,并且内存开销也小很多。而对结果集的遍历的操作的时候,Iterator仍然要访问数据库,所有主要的时间开销都花在这里。因此,Iterator方式适合于只对结果集进行1次遍历操作的情况,并且Iterator方式特别适合于从超大结果集中取少量数据,这种情况Iterator性能非常好。另外Iterator方式可以利用JCS缓冲,在使用缓冲的情况下Iterator方式的遍历操作速度将不受数据库访问速度的影响,得到彻底的提升。

Hibernate Iterator JCS方式应该是最快的,Hibernate List速度和JDBC比较接近,而Hibernate Iterator速度还是慢的离谱。另外JDBC和List受到Fetch Size的影响很大,当Fetch Size大于50的时候,速度有非常显著的提升,而Hibernate Iterator的速度似乎不受Fetch Size的影响。

以上是“JDBC与Hibernate如何读取性能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: JDBC与Hibernate如何读取性能

本文链接: https://www.lsjlt.com/news/293304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JDBC与Hibernate如何读取性能
    这篇文章主要介绍JDBC与Hibernate如何读取性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JDBC仍然是最快的访问方式,不论是Create还是Read操作,都是JDBC快。Hibernate使用uuid....
    99+
    2023-06-17
  • Hibernate如何读取Clob
    这篇文章给大家分享的是有关Hibernate如何读取Clob的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hibernate虽然对多种数据库进行了适应,以达到前台感受不到后台的数据库类型 ,但是在 Blob 和 ...
    99+
    2023-06-17
  • 如何优化Hibernate性能
    这篇文章主要介绍“如何优化Hibernate性能”,在日常操作中,相信很多人在如何优化Hibernate性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何优化Hibernate性能”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • springboot如何读取自定义属性
    很多时候,我们开发当中,需要通过配置自己的属性信息来满足不同环境下的应用部署,因此需要springboot能够读取我们自定义的属性,常用的读取自定义属性有@Value和@Config...
    99+
    2024-04-02
  • PHP 性能优化:性能指标解读与分析
    php 性能优化需要关注关键性能指标(kpi),包括请求/秒 (rps)、响应时间、内存使用率、cpu 利用率和错误率。分析这些 kpi 可识别性能瓶颈。实战案例中,rps 低、响应时间...
    99+
    2024-05-10
    php 性能优化 apache 并发请求
  • 如何获取Hibernate关联关系
    这篇文章主要介绍了如何获取Hibernate关联关系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。获取Hibernate关联关系的pojo。我是指例如一个User(用户)拥有...
    99+
    2023-06-17
  • mongodb并发读取性能怎么提高
    要提高 MongoDB 的并发读取性能,可以考虑以下几个方面: 使用索引:在需要频繁读取的字段上创建索引,以加快查询速度。 ...
    99+
    2023-10-27
    mongodb
  • 如何在Python读取与存储数据
    这篇文章将为大家详细讲解有关如何在Python读取与存储数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、图示二、csv文件读取csv文件read_csv(file_path or bu...
    99+
    2023-06-15
  • 如何读取cookie
    这篇文章主要为大家展示了“如何读取cookie”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何读取cookie”这篇文章吧。 cookie的设置读取 &n...
    99+
    2024-04-02
  • Aurora数据库的读写性能如何
    Aurora数据库具有很高的读写性能,这主要得益于其架构的优化。Aurora数据库是一种关系型数据库引擎,基于MySQL和Postg...
    99+
    2024-04-02
  • PHP中如何使用Memcache缓存技术提高数据读取性能
    随着互联网技术的发展,访问量爆增,如何提高网站的性能成为了一个刻不容缓的问题。而缓存技术是提高网站性能最常用的解决方案之一。PHP作为一种非常流行的后端开发语言,也提供了许多缓存技术,其中最常用的便是Memcache缓存技术。Memcach...
    99+
    2023-05-15
    PHP Memcache 缓存技术
  • 如何利用python读取图片属性信息
            从照片里面获取GPS信息。可交换图像文件常被简称为EXIF(Exchangeable image file format),是...
    99+
    2024-04-02
  • 如何使用JDBC操作数据库?JDBC API的使用详细解读
    文章目录 1. DriverManager 1.1 注册驱动 1.2 获取连接 2. Connection 2.1 获取执行sql的对象 ...
    99+
    2023-08-31
    数据库 mysql java
  • VB.NET如何读取INI
    这篇文章主要介绍VB.NET如何读取INI,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!虽然VB.NET中读取XML配置信息很方便,但有时开发的过程中还是要用到INI文件,VB.NET读取INI却不像VB中那么方便了...
    99+
    2023-06-17
  • 如何用Pandas读取
    本教程操作系统:Windows10系统、Dell G3电脑。Pandas是一个流行的Python数据处理库,可以用于读取和处理各种数据格式。下面是使用Pandas读取文件的一般步骤:1.导入Pandas库:import pandas as ...
    99+
    2023-12-09
    Pandas
  • 如何使用Golang创建与读取Excel文件
    目录摘要引言正文架构文件对象数据的表示数据的解析实际架构Excelize 基础库文件坐标样式单元格操作数据验证数据的表示和解析表示解析大规模数据的写入需要关注的问题大量枚举值的设置大...
    99+
    2024-04-02
  • 什么是 JDBC Blob 数据类型?如何存储和读取其中的数据?
    BLOB 是二进制大对象,可以容纳可变数量的数据,最大长度为 65535 个字符。它们用于存储大量二进制数据,例如图像或其他类型的数据。文件。定义为 TEXT 的字段也保存大量数据。两者之间的区别在于,存储数据的排序和比较在 BLOB 中区...
    99+
    2023-10-22
  • 什么是 JDBC Blob 数据类型如何存储和读取其中的数据
    JDBC Blob(Binary Large Object)是一种用于存储大型二进制数据的数据类型,比如图片、音频、视频等。在数据库...
    99+
    2023-10-10
    JDBC
  • Python文本文件与csv文件如何读取与写入
    这篇“Python文本文件与csv文件如何读取与写入”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python文本文件与cs...
    99+
    2023-06-29
  • java springboot中如何读取配置文件的属性
    目录配置文件(1)使用注解@Value映射(2)使用@ConfigurationProperties映射(3)推荐使用:极简方式 @Bean和@ConfigurationProper...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作