文章分为十三个小块儿对Hibernate性能优化技巧进行总结性分析,分析如下:
一、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session. clear()或者session. evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。
二、对大数据量查询时,慎用list()或者iterator()返回查询结果,
<1>. 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较
大时,会占用很多的处理时间。
<2>. 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,
Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花
费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会
使用时,使用iterator()才有优势。
<3>. 对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结
果集向前向后滚动。
三、对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为
简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。
四、对含有关联的PO(持久化对象)时,若default-cascade="all"或者 “save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。
五、在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时才会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。
六、对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。
七、Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。
八、Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。
九、不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。
十、Dynamic Update 如果选定,则生成Update SQL 时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能.Dynamic Insert 如果选定,则生成Insert SQL 时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能
十一、在编写代码的时候请,对将POJO的getter/setter方法设定为public,如果设定为private,Hibernate将无法对属性的存取进行优化,只能转而采用传统的反射机制进行操作,这将导致大量的性能开销(特别是在1.4之前的Sun JDK版本以及IBM JDK中,反射所带来的系统开销相当可观)。
十二、在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能的改善。
十三、由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用。
以上便是对Hibernate性能优化技巧总结,希望能对您有所帮助。
相关推荐
18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2 使用配置文件指定的...
18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2 使用配置文件指定的...
18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2 使用配置文件指定的...
18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2 使用配置文件指定的...
在如今快速发展的技术世界中,后端开发一直是互联网行业的核心之一。无论是企业级应用、电子商务平台还是社交媒体,都离不开强大稳定的后端支持。...后端性能优化技巧(90积分):探讨后端系统性能优化的各种方
掌握一定的数据库查询技巧及SQL语句优化技巧。 Oracle数据库 Oracle体系结构及系统管理、Oracle数据库高级编程、数据库设计基础。 掌握Oracle体系结构及核心编程技术 XML XML语法、XML解析(SAX、DOM)、Dom4j...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用...Hibernate技术、Struts框架、Spring框架、错误处理与程序调试、Web程序优化与发布等...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用...Hibernate技术、Struts框架、Spring框架、错误处理与程序调试、Web程序优化与发布等...
│ Java面试题74:sql语句优化小技巧.mp4 │ Java面试题75:批量插入几百万条数据.mp4 │ Java面试题76:有没有使用过redis.mp4 │ Java面试题77:redis的使用场景.mp4 │ Java面试题78:redis存储对象的方式.mp4 │...
13 JDBC性能优化技巧 <br> 权限设计 1 权限系统概要 2 关于权限设计方面的问题 3 关于用户角色权限管理一点想法 4 关于权限系统的设计 <br> 缓存系统 1 ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...