hibernate大量数据查询 内存溢出问题

问题描述

现在项目中需要对数据进行导出,1万条记录。在excel导出过程,查到hibernate查询时候,内存值会有100M的峰值,加上其他业务,就会报内存溢出问题。hibernate如何做到list查询出来数据,内存峰值能够比较小(实际对象占用只有50M样子),数据需要导出,所以iterator也不适合。那位大牛知道如何查询内存值保持一定的稳定值,变化不能太大

解决方案

个人认为针对具体的问题要根据实际情况选择最适合的工具,楼主说的这种场景其实完全可以用数据库工具来做,没必要非得用Hibernate甚至非得用Java来做,Oracle/MySQL都有非常好用的数据导出工具
解决方案二:
不知道你的问题解决了没有,可以利用hibernate的无状态session和滚动结果集来操作你说的问题,可以解决哈:伪代码:StatelessSession session=sessionFactory.openStatelessSession();Transaction t=session.beginTransaction();ScrollabeResults sResults=session.getNameQuery("hql").scroll(ScrollMode.FORWARD_ONLY);while(sResults.next()){ //你的代码}t.commit();session.close();.......滚动结果集不会立即查询,只会返回当前数据库的游标,你需要多少,就会差多少,而且无状态结果集不会使用一级,二级缓存!
解决方案三:
如果是导出的话就要用JDBC查询,连这个都要用Hibernate,简直就是滥用框架!
解决方案四:
分批次查询吧,分页思想
解决方案五:
只查需要的字段,不要用对象,这样应该会少很多,调整也比较简单
解决方案六:
你可以讲1万条记录分10次查询,每次只查询1000条记录,然后每个excel中只保存1000条记录。将10个excel文件先打成压缩包,然后将压缩包下载,这样应该比较节省内存
解决方案七:
首先你要确定你要导出的版本,我记得jxl导出的03版本的excle只支持2W条数据量的导出.解决方案有两个:1.把查询出来的数据分批(分行)导出,比如每50M为一个文件,然后程序再整合成一个文件.2.查询数据的时候不要得到对象的所有信息.只得到对象的ID.然后通过load来获取对象的所有信息.

时间: 2024-11-05 12:16:50

hibernate大量数据查询 内存溢出问题的相关文章

关于Hibernate中数据查询问题,ListAll

问题描述 关于Hibernate中数据查询问题,ListAll 这是是我的方法,红线是传过来的值,然后就是死循环? 解决方案 这个是调用的方法,请大神们,指点!!! 解决方案二: 你可以查看我的博客:http://blog.csdn.net/u014427391/article/details/50621111 解决方案三: 你可以查看我的博客:http://blog.csdn.net/u014427391/article/details/50621111 解决方案四: 你可以查看我的博客:ht

ASP在ACCESS中模糊查询"内存溢出"的解决方法

今天在日常维护一个网站时,发现该网站的留言程序没有经过严格的验证过滤,导致了将近十万条垃圾数据.而其中又不乏重要信息,需要清理数据,以及增加更为严格的验证措施. 而通过在数据库中直接删除又不太科学,会误删很多重要信息. 通过 模糊查询语句: 复制代码 代码如下:select * from Feedback where Comments like '%http%' 结果:"内存溢出" 经过不断的搜索,找出了问题的主要原因: asp 中用 LIKE 关键字查询日文符号就会出错,比如说Chr

数据-redis内存溢出有什么好一点的解决办法.

问题描述 redis内存溢出有什么好一点的解决办法. 小弟又来唠叨了, redis里面有什么方法当内存达到限制值,把过期的数据存到硬盘不存到内存,通过这样的方式来释放内存 解决方案 过期的数据redis内存不够的时候会自动清除来释放内存.

读取大量数据时数据时内存溢出,怎样分批读取?

问题描述 在写一个程序更新某数据内某条内容时,(用的数据库是sql2000)发生java.lang.OutOfMemoryError:Javaheapspace错误,具体代码如下:publicvoidUpdate(HashtableinputData,HashtableoutputData,HttpSessionmySession){Beanfind=newBean();//封装了连接数据库等操作Stringstr="selectid,content,namefromPlan";Str

phpExcel导出大量数据出现内存溢出错误的解决方法_php技巧

phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码 代码如下: PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中 复制代码 代码如下: PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzip压缩,然后保存在内存中 复制代码 代码如下: PHPEx

phpExcel导出大量数据出现内存溢出错误解决办法

phpExcel将读取的单元格信息保存在内存中,我们可以通过  代码如下 复制代码 PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中  代码如下 复制代码 PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;  2.将单元格序列化后再进行Gzip压缩,然后保存在内存中  代码如下 复制代码 PHPE

phpExcel数据内存溢出解决办法

先看实例  代码如下 复制代码 <?php         require_once 'PHPExcel.php';       require_once 'PHPExcel/Writer/Excel5.php';    require_once("..includemysqlconn.php");   $sdate=$_POST["sdate"];//接受传递过来的生成时间段   $edate=$_POST["edate"];   //$

关于MySQL的整型数据的内存溢出问题的应对方法_Mysql

今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题 .经过很久的排查是数据类型溢出了(发生问题的版本是MySQL 5.1).后来通过给朋友那边把MySQL 5.1升级到MySQL 5.5去解决这个问题. 这也让我有兴趣去了解一下MySQL不同版本数据类型溢出的处理机制. 先看一下MySQL支持的整型数及大小,存储空间: 另外请记着mysql的数据处理会转成bigint处理,所以这里就用bigint几个测试: SELECTCAST(0ASUNSIGNED)-1; SELECT922

.net 取大数据时服务器可用内存远远没有达到峰值可是报内存溢出,除了分页查询还能怎么处理?

问题描述 如题,望大神指点一二 解决方案 解决方案二:不是你有100M内存,然后你这一个程序就可以用100M内存的--解决方案三:异步加载,当你下拉你的滚动条时,每下拉N个像素,则多请求一些数据加在Table末尾.其实还是分页的逻辑.数据太多了就一次不要加载完呗.不然还能怎么样?解决方案四:引用1楼starfd的回复: 不是你有100M内存,然后你这一个程序就可以用100M内存的-- 那怎么能设置一下,让使用内存达到最大化呢,现在我遇到的问题就是,服务器的可用内存大概有6个G,实际上我取数据量超