文档章节

Hibernate性能优化小结

JiaChang
 JiaChang
发布于 2016/06/05 20:45
字数 1019
阅读 9
收藏 1

Hibernate性能优化小解:

1. 注意session.clear()的运用,用完的数据要clear一下,及时让GC回收掉

2. 1+N问题

什么是1+N问题?

在对象关系中存在1对多或者多对一的情况,当一的这方设置 cascade={CascadeType.ALL} 或者fetch=FetchType.EAGER时。会出现当查询一 的这方的时候也会顺带的查询多的那一方。

第一种解决方案:设置fetch=FetchType.LAZY(在hibernate中如果一的这方不设 置,默认就是LAZY)

第二种解决方案:session.createCriteria(Class).list();

join fetch(HQL做表连接查询);

3. Listiterate的区别

⑴.List直接把对象取出来放到session缓存里。

iterate  先取出id,什么时候用到对象了再根据id去数据库中取出来。

⑵.List没有利用Session级的缓存,第二次利用仍然会发出sql语句去数据库里取 数据。

iterate利用Session级的缓存,第二次先找Session级的缓存。

 

4. 一级缓存和二级缓存和查询缓存

一级缓存:Session级别的缓存(Session中的HashMap)。

二级缓存:SessionFactory级别的缓存(依赖第三方jar包,适合放经常被访问,改 动不大,数量有限的对象)。

查询缓存:记录查询结果集,下次再重复查询时直接从缓存中拿(依赖于二级缓存, 要先打开二级缓存)。

5. 缓存算法(解决缓存满了之后怎么处理)

⑴.LRU(Least Recently Used) 最近很少被使用

⑵.LFU(Least Frequently Used)最不常被使用

⑶.FIFO (First In First Out) 先进先出

 

6. 事务的并发处理

什么是事务?事务的四种特性?(原子性,一致性,隔离性,持久性

事务并发时可能出现的问题:

⑴.丢失更新:两个事务都

⑵.脏读:一个事务读取到了另外一个事务没有提交的数据

⑶.不可重复读:一个事务两次读取同一条数据,但是两次读取的

结果不一致。

⑷.幻读:一个事务读取过程之中,另外一个事务又插入了一条

  新数据。

7. 数据库的事务隔离机制

⑴.read-uncommited : 能够去读取没有提交的数据

⑵.read-commited : 只能读取提交的数据(不能避免不可重复读)

⑶.repeatableread : 可重复读(加锁,一个事务没处理完别的事务不能修改)

⑷.serializable : 不能并发(效率最低)

8. Hibernate事务隔离

Haibeinate事务隔离也是和数据库事务隔离一样,也是四种。

设置hibernate的事务隔离级别:
hibernate.connection.isolation=2

1 :read-uncommited

2 :read-commited

4 :repeatableread (MySql默认)

8 :serializable

9. 悲观锁:(前提是为了考虑并发的效率,把Hibernate.connection.isolation=2,还要解 决不可重复读的问题)注意依赖于数据库的锁。

工作原理:就是把一个事务要操作的数据上锁,这个事务不释放锁别的事务不 能操作该数据

设置锁方式:

Session.load(XX.class,id,LockMode.UPGRADE);

 

10. 乐观锁:

一般是通过为数据库表增加一个version字段来实现

工作原理:读取数据时,将version字段一同读出,之后进行更新时version会加一。

所以在一个事务更新之前先检查version是否和当前的version一致,如果 不一致证明已经被别的事务修改过了。

11. 悲观锁和乐观锁的理解

悲观锁在对于取数据之前,不确定在操作期间会不会有人来修改我的数据,那么干 脆先上把锁,等我操作完别人再操作,而相对于乐观锁,想取数据就取,乐观的觉 得在我操作数据的期间不会有人来修改数据,就算我要修改数据时发现数据被更新 了(version字段不一致),大不了再重新处理一遍或者做出相应的处理就行了。所 以乐观锁相率比较高。

 

© 著作权归作者所有

上一篇: Spring初识
JiaChang
粉丝 3
博文 35
码字总数 21583
作品 0
海口
程序员
私信 提问
Java专家之路(二)---数据访问和数据持久化框架的总结

Java数据访问和持久化(SQL) 方案一:JDBC 什么是JDBC? Java语言访问数据库的一种规范,是一套API。JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的...

u011500356
2017/12/20
0
0
Hibernate通用序列化方案,避免延迟加载问题及序列化整个数据库至

在使用Ajax: Hibernate Entity => json, Flex RemoteObject: Hibernate Entity => ActionScript Object的过程,经常碰到如下问题: 问题: 1.Hibernate碰到延迟加载的属性访问时如果session被......

baisou
2013/09/13
934
0
Hibernate之CRUD实践

Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate。 Hibernate与MyBatis相比,虽然...

youcongtech
2018/10/22
0
0
Spring/Hibernate 应用性能优化的7种方法

对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能。此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法。本文系...

OneAPM蓝海讯通
2015/10/27
79
0
Hibernate OGM 4.1.0.Beta8 发布,性能提升

Hibernate OGM 4.1.0.Beta8 发布,此版本提升了性能,减少了数据往返存储,优化数据存储的乐观锁支持,提供原子性的 find-and-update 操作。 此版本同时也解决了一些 bug,还有一些 hood 下的...

叶秀兰
2014/10/31
2.2K
8

没有更多内容

加载失败,请刷新页面

加载更多

Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
30分钟前
10
0
cloud-zuul路由网关

九、zuul路由网关 概述 1.1 能干嘛 路由、过滤 路由基本配置 路由访问映射规则 十、springCloud config分布式配置中心

榴莲黑芝麻糊
30分钟前
14
0
Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。 问题 在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源...

mskk
43分钟前
16
0
写论文之前的准备都有哪些?干货来了!

原文链接:https://www.lwfdy.com/archives/144.html 之前跟大家谈了许多有关于初稿修改以及写作事项需要注意的问题,那么今天我们来说一说,在写之前,我们需要做哪些准备呢,为了做到下笔如...

辅导员
49分钟前
11
0
idea快捷键

Alt + Enter 引入类 Ctrl + O 查看我们继承的类或者接口中的方法,以及我们要实现的方法 Ctrl + Alt + b 查看接口实现类中方法(就是我们使用接口编程时,在调用实现类方法处直接Ctrl+鼠标左...

行者终成事
57分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部