日期:2014-05-18  浏览次数:20987 次

数据大问题
问题:一次性从数据库查询出来的数据量太大(例如:100W条),tomcat容器就outMemery了,请教大神有什么好点子么?
数据 数据库 tomcat outMemery

------解决方案--------------------
这个情况内存溢出就太正常了。。。
分页查询吧,而且你业务上哪有用到一次这么多数据?
比如第一次查100条,第二次从第101开始,
------解决方案--------------------
引用:
Quote: 引用:

这个情况内存溢出就太正常了。。。
分页查询吧,而且你业务上哪有用到一次这么多数据?
比如第一次查100条,第二次从第101开始,

没有其他方法吗?


你想要怎么样的效果,常规解决方案就是我上面说的,一次加载100w不要这么做!
------解决方案--------------------
内存都不够了,还谈什么后面的业务处理?
------解决方案--------------------
第一,可以尝试修改tomcat所固定占用的内存,即使100W数据也看具体数据所占的大小。
第二,分次查,但是内存里面不要存那么多,该释放的释放,或者取出来的数据处理一下存储必要的数据之后就可以释放了。

------解决方案--------------------
楼主是什么需求?需要一次取出来这么多?
------解决方案--------------------
就看楼主的需求,一次性读这么多数据是要干嘛,明显这么多数据处理的实时性不高。
那么我就可以认为你是一个后台的作业需求,如果是这个前提,那么分两种。
1,数据库层面,写过程处理你的业务,
2,java层可以另外部署一个job应用,专门处理你这样的大作业,可以多分店内存。我们这边最大分了4G
------解决方案--------------------
你一次去那么怎么存?分批吧
------解决方案--------------------
磁盘有地方么?
存上在读出来好了
------解决方案--------------------
弄个NB服务器 ,加大tomcat内存 呵呵
------解决方案--------------------
如果做报表的话,貌似是需要一次行查询吧,我也遇到过这个问题。
------解决方案--------------------
分页查询
------解决方案--------------------
楼主具体什么需求?
------解决方案--------------------
这还真是个麻烦事。只能加大jvm内存
------解决方案--------------------
引用:
这还真是个麻烦事。只能加大jvm内存


区区100W不算什么
------解决方案--------------------
设置tomcat的内存  set JAVA_OPTS=-Xms128m -Xmx256m  
------解决方案--------------------
D:\tomcat1\bin\catalina.bat  
------解决方案--------------------
引用:
Quote: 引用:

如果做报表的话,貌似是需要一次行查询吧,我也遇到过这个问题。

怎么解决的?

貌似没解决。
------解决方案--------------------
100W条数据··放到浏览器上 你们领导眼睛0.001?还是客户拿放大镜看?
------解决方案--------------------
引用:
Quote: 引用:

设置tomcat的内存  set JAVA_OPTS=-Xms128m -Xmx256m  

这是治标不治本,我算是明白了,
一个容器就好比一个瓶子,他的容量是固定的,
假设这个瓶子只能装1斤水,你偏要往里装1斤半,多的就溢出了。
所以还是要控制,不让溢出:缓存+分页+查询条件(必选的)。


你既然能够去优化,你就不需要用这个了,,我这个是真的优化不了才去更改的,,,,,