文档章节

两种极端:频繁的查询和巨大的结果集

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 584
阅读 14
收藏 0

写到这篇文章时,我们可以对Hibernate的性能调优策略做一个宏观的剖析了。当系统访问一个实体时,Hibernate会到数据库中提取相应数据封装成实体供程序使用,但大多数情况下问题并不是这样简单。对象模型由很多实体和值对象组成,它们之间相互依赖,构成一张复杂的“对象图”。从一个指定的对象开始,我们可以导航到与这个对象有直接或间接关系的任何对象上。再回到我们一开始的问题:你怎样从数据库中重建这个对象?我们很容易想到两种基本的策略:

策略1:开始时只加载这个对象的基本数据。当要从这个对象导航到其他对象时,再将目标对象从数据库中加载出来。这就是hibernate中的lazy loading.这个策略可以避免一次性载入过多数据,代价却是需要频繁访问数据库。这就是“过多查询”的问题。这种情况典型的例子是N+1次查询问题(参考JPwH13.2.5)。

策略2:一开始就将该对象和它的所有并联对象一次性查出。这就是hibernate中的eager fetch.这个策略消除了频繁访问数据库的问题,但它会加载太多的数据。它的查询结果是一个巨大的笛卡尔积!(至于为什么是笛卡尔积请参考http://blog.csdn.net/bluishglc/archive/2010/05/09/5571403.aspx,简单说:当这个对象有两个以上的关联集合时,查询结果就必然是一个笛卡尔积了)并且可能很多数据我们都不会用到。笛卡尔积问题同样参考JPwH13.2.5。

在这两种基本策略,也是两种极端的情况下:我们通过Hibernate进行的性能调优无非就是要在这两者之间取得一个平衡:使用最少的查询得到必需的数据,不加载本次用例(use case)使用不到的对象!这就需要我们为每个用例制定hibernate动态抓取策略也可以叫抓取计划来实现!

 

本文转载自:http://blog.csdn.net/bluishglc/article/details/5571527

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
Optimization Algorithms

机器学习应用是一个高度依赖经验并伴随着大量迭代的过程——这一句话不得不同意,经验更重要,深有体会。你需要训练诸多模型才能找到合适的那一个。深度学习没有在大数据领域发挥最大的效果,...

徐凯_xp
2017/12/22
0
0
MySQL 对于大表(千万级),要怎么优化

提到优化,先要确定出现的问题,是存储引擎选择问题,还是sql语句使用问题(如:索引)亦或者是单一存储服务器对于千万级别的数据力不从心。 解决方法: 1、根据不同业务选用不同存储引擎,虽...

八戒_o
2016/01/07
409
0
【原创】使用 mysql_use_result 还是使用 mysql_store_result?

本文整理了关于“使用 mysqluseresult 还是 mysqlstoreresult”的相关内容。 下面是网上找到的网友说法: =============== 博文一: 在使用 mysqlquery() 进行一次查询后,一般要用这两个函数...

摩云飞
2013/12/21
0
0
关于Mysql SQL优化的总结,持续更新中

SQL优化的思路: 1.优化更需要优化的sql; 2.定位优化对象的性能瓶颈:优化前需了解查询的瓶颈是IO还是CPU,可通过PROFILING很容易定位查询的瓶颈。 3.明确优化目标; 4.从Explain入手; 5....

xiawet
07/25
0
0
Frequent Pattern mining

Frequent pattern mining的几种方式: 1.基于模式完整性的(completeness of patterns) 2.基于和规则集有关抽象层次的(levels of abstraction) 3.基于和规则有关维数的(number of data dimen...

CCrow
2014/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jQuery学习笔记180923

射手

颖伙虫
8分钟前
0
0
[python] colorama 模块 - 改变控制台输出文本的颜色

除了使用 PyQt 这样的图形化开发框架外,基本上 python 程序都是跑在控制台中的。很多时候,单纯使用黑白的文字不能很好地突出我们要显示的信息。有时候我们需要将错误的提示使用红色标注,而...

cometeme
13分钟前
0
0
Makefile 学习 2 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 进阶 1. Makefile 中的内容 显式规则。显式规则说明了,如何生成一个或多的的目标文件...

公孙衍
29分钟前
0
0
NIO与BIO的区别、NIO的运行原理和并发使用场景

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的...

Java干货分享
47分钟前
1
0
72.告警系统邮件引擎 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统 20.23/20.24/20.25 告警系统邮件引擎 邮件首先要有一个mail.py,以下。 因为我们之前zabbix的时候做过,就可以直接拷贝过来 mail.s...

王鑫linux
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部