文档章节

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

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 584
阅读 14
收藏 0
点赞 0
评论 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
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
HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法

一、关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题。关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的。假设超市经理想更多...

wzy0623
2017/08/09
0
0
关于机器学习中的一些常用方法的补充

前言 机器学习相关算法数量庞大,很难一一穷尽,网上有好事之人也评选了相关所谓十大算法(可能排名不分先后),它们分别是: 1. 决策树 2. 随机森林算法 3. 逻辑回归 4. 支持向量机 5. 朴素...

chenhu73
06/28
0
0
高维向量快速检索方法Locality Sensitive Hashing之二算法改进

位置敏感哈希是当前高维空间中近似近邻(Approximate Near Neighbor, ANN)搜索速度最快的解决方法,LSH在汉明空间进行搜索,E2LSH是对LSH的改进之一,在欧氏空间进行搜索。与基于树的索引方法...

holygao
06/28
0
0
Mysql数据库开发之mycat分表分库如何做?

Mycat分表分库虽然能解决大表对数据库系统的压力,但也有一些不利,因此Mycat分表分库要先解决的问题是,分不分库,分哪些库,什么规则分,分多少分片。那么究竟是怎么分的呢? 1、能不分就不...

老男孩Linux培训
05/31
0
0
【译】Cassandra数据模型

本文是英文贴的翻译,可以直接查看英文原文。 选择正确的数据模型正是使用Cassandra最困难的一部分。如果诸位有相关开发经验,就会发现CQL虽然看起来很熟悉,但是使用起来却完全不同。 本文将...

Landas
2016/12/21
31
0
Mycat分表分库怎么分?Mysql DBA学习

Mycat分表分库虽然能解决大表对数据库系统的压力,但也有一些不利,因此Mycat分表分库要先解决的问题是,分不分库,分哪些库,什么规则分,分多少分片。那么究竟是怎么分的呢? 1、能不分就不...

mo默瑶
05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据库事务的四大特性以及事务的隔离级别

本篇讲述数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是...

Java大蜗牛
13分钟前
0
0
Spring Boot 整合 MyBatis/通用Mapper/PageHelper分页插件

整合MyBatis 整合通用Mapper 1. POM依赖配置 <properties><mapper.starter.version>2.0.3-beta1</mapper.starter.version></properties><!-- 通用Mapper --><dependency><groupId>t......

OSC_fly
22分钟前
0
0
CentOS7 双网卡绑定

环境 操作系统 CentOS7.5,禁用 NetworkManager 服务 网卡 eth0 网卡 eth1 绑定网卡 bond0 网卡 eth0 配置 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=EthernetBOOTPROTO=noneD......

Colben
23分钟前
0
0
zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
40分钟前
11
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
40分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
43分钟前
4
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
48分钟前
1
0
《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
59分钟前
1
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
今天
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部