Hibernate性能优化

一.缓存分类:

一级缓存:即当前事务范围内的数据缓存

Hibernate而言,事务级缓存是基于Session的生命周期实现的,session一旦关闭,一级缓存就清除,一级缓存为Hibernate自带的缓存,是必需的

 

应用级(二级)缓存:

即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享

hibernate中,应用级缓存由SessionFactory实现

 

分布式缓存:

即在多个应用实例,多个JVM间共享的缓存策略

 

 

二.延迟加载类型:

实体对象的延迟加载(load())

集合的延迟加载(一对多和多对多时,关联集合)

属性的延迟加载(clob大数据类型时)

 

三.Hibernate的悲观锁和乐观锁

多个用户可能同时读取或更新一个数据

需要一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,也就是所谓的锁,即给我们选定的目标数据上锁,使其无法被其他程序修改

支持两种锁机制:悲观锁和乐观锁

悲观锁:依赖于数据库机制,在整个过程中,将数据锁定,其他任何用户不能对其读取和修改,一般用于短事务,并发性不好

乐观锁:

为数据增加一个版本标识,更新时,版本号加一,将提交的数据与数据库对应记录的当前版本信息进行对比,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据

 

四.连接池:

不用连接池时,每一次请求都要建立一次数据库连接,每一次数据库连接,使用完后都要关闭连接,频繁的数据库连接会占用很多系统资源,响应速度下降,同时无法设计最大连接数,可能会因为连接数量过多,而导致服务器内存崩溃。程序异常而未能关闭,将会导致数据库系统中的内存泄漏,最终不得不重启数据库。

系统资源被毫无顾忌的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃

 

解决方案是:在持久层和数据库之间建立一个缓冲池”。预先在缓冲池中放入一定数量的连接对象,当需要建立数据库连接时,只需从“缓冲池”中取出一个空闲连接对象,将空闲连接设置为忙碌,使用完毕,再将忙碌状态设置为空闲状态放回链接池中。

由于建立连接后一直不关闭,所以可以减少建连接和关连接的开销,提高响应速度。通过设定连接池最大连接数量来防止系统无休止的数据库连接。更为重要的是可以通过连接池的管理机制监视数据库的连接数量,使用情况,为系统开发,测试及性能调整提供依据。

 

工作流程:

如果没有空闲连接,则检查当前连接池是否达到最大连接数量,

如果没有达到,则新建一个连接,

如果已经达到,就等待一段时间,

如果等待时间内有连接被释放就把这个连接分配给等待的用户,

如果等待时间超过预定时间timeout,则返回null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值