Hibernate事务缓存优化

本文探讨了Hibernate框架中的优化策略,包括Session和事务管理的最佳实践、分页控制、延迟加载的应用、以及缓存配置等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

hibernate优化

 

session控制

 为了避免session创建的开销,需要对session的创建进行控制

 当前行为:

  使用ThreadLocal的方式控制session的创建

  使用filter的方式创建和关闭session

  尚未配置filter

   此行为仅仅使用web开发中应用。

 

事务控制

    针对hibernate由三种dao操作 find save flush

    find即查询不需要开事务,所以可以考虑针对查询不使用事务控制

    针对saveOrUpdate使用事务

    现在事务提交是在filter结束的时候去做

    但有一些action中是不需要事务的,频繁开关事务可能会带来一定的系统开销

    当前测试使用和不使用事务进行查询测试结果(根据ID查询记录100次时间比较)

        不开事务 421ms

        打开事务 516ms

    事务的开关最好限定在方法内部,可以考虑在service方法中开关事务,可以避免这个问题

    session关闭和事务提交的时候,hibernate会主动调用flush方法进行数据库同步

    所以在当前项目中不需要关心flush方法

 

事务实现选用和配置

 使用jdbc事务控制

 不选用jta作为事务的实现

  放弃理由

   当前测试服务器tomcat本身仅仅是个web server,并不支持jta  

  配置hibernate属性信息

   hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory

              net.sf.hibernate.transaction.JDBCTransactionFactory

  jta的好处

   JTA提供了跨Session的事务管理能力

   为以后扩展留下了选择空间

  实现

   单一的增删改操作不需要调用session.beginTransaction()等方法

 

   针对多条记录的修改使用下面的方式调用api

   UserTransaction ut = (UserTransaction)(new InitialContext().lookup("java:comp/UserTransaction"));

   ut.begin();

         //.....

         ut.commit();

 

          使用下面的方式也可以同样实现事务控制,但因为hibernate内部同样调用上面的api实现

          处于节省资源的想法,不建议使用

 

   Transaction tx = session.beginTransaction();

   tx.commit();

 

   以后可以考虑使用springaop实现替换当前实现  

 

  tomcat中的配置

   <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>

      <ResourceParams name="UserTransaction">

      <parameter>

    <name>factory</name>

    <value>org.objectweb.jotm.UserTransactionFactory</value>

      </parameter>

      <parameter>

       <name>jotm.timeout</name>

       <value>60</value>

      </parameter>

      </ResourceParams>             

 

分页控制

 

 通过criteria. setFirstResult/setMaxResults方法可以限制一次查询返回的记录范围

延迟加载

 

 lazy_load

 所有有关数据关联(一对多,多对多等)的映射都需要指定延迟加载

 因为当前系统的session关闭是在filter里面做的,所以不需要控制关联对象的加载

 在特殊的情况下,比如session关闭后获取关联对象

 可以在session关闭前调用Hibernate.initialize()API获取关联对象

 

缓存选用及配置管理

 

 当前选用EHCache作为第二层的缓存(第一层为数据库缓存)

 由于EHCache不支持分布式,所以将来可以考虑使用jgroup实现分布式

 针对系统内大部分的dao操作使用只读(read)

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值