读书人

[]高并发的大数据量查询导致系统频繁宕

发布时间: 2012-11-05 09:35:11 作者: rapoo

[求助]高并发的大数据量查询导致系统频繁宕机,咋办啊
我们的大数据量查询是数据库分页的,
但是导出和打印功能是基于全部数据的.

系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期.

而我们的系统的硬件设备是有限的 不能再升级了.

抓取内存大对象的时候,常常发现数百个5M以上的collection大对象

我们的这个系统不大,就是一个提供一些信息管理的,页面也不多(不到1000个 其中能有6 7百的页面是查询),但是并发访问量比较大,同时在线能有5000人,而并发的查询操作至少也有500了,其中大数据量(10万以上)的太多了.这个问题怎么办啊

哪位有好的解决办法 (不生成vo 和 vo的collection也许可以,但是这样改动太大了)
而且关键是 系统已经上线了, 不太可能重新开发所有的dao层 :'(

4G内存的机器(当然java只用了2g) websphere 6.0的机器



现在,问题的关键就是,你能不能使用流式的输出字节流了,不使用字节流,这样的大量数据,逻辑上是没有一个简单的解决办法的。前面有人提了n个复杂的方法,疯掉了,还是KISS原则,仔细考虑一下。

想一下啊,你们谁见过哪一个数据库提供的查询工具,在做







楼主说的没错。
以前我做过一个框架,
在这里就不再推广告叫lz去用了。
但可以谈一下我们怎么做cache,也许能(或缓解)lz的问题。
我们的cache是根据业务逻辑cache内容的。
例如,如果有个业务是list一个100万的表,
如果你cache所有的内容,机子内存肯定受不了,
如果不cache,每次到数据库去取,翻一页肯定很慢。

针对楼主的那些问题,我们一般有以下方案。
1, 如果list一个表,
可以用cache,我们的cache支持分段cache,就是说:
// 你可以写更多,这里函数用的jdk5缺省参数,它的意思是cache第一页,第二页,最后一页,假设每页显示200条数据, Cache.range(0, 200, 200, 400, 999800, 1000000);

导用一句话,就是“cache on need”,而不是cache所有你“可能”要用到的数据。


2,对于那些一次导出所有的数据,我们提供resultHandle,它保存一个结果集的handle,可以重复和共享使用,不占内存。

3,我们提供search操作一次可以返回所以结果,可以不组装对象,速度等同于jdbc。

你可以在下面得到我们的框架:
http://sourceforge.net/projects/dbcoat 59 楼 leadyu 2007-07-12 可以考虑采用流的方式,打印时不是把数据一次性全取出,而是分页取,然后不断往流里面写,类似Http Server的做法。这样内存占用较低,写个自己的BufferInputStream 60 楼 liuwei2630 2007-07-12 我们3000多万条数据用的是预编译表,效率稍微好点 61 楼 huoyunzsy 2007-10-19 用的mysql 单表8w条数据 count(id)就吃不消了 咋办啊 62 楼 cydia 2011-09-01 huoyunzsy 写道用的mysql 单表8w条数据 count(id)就吃不消了 咋办啊
8w算什么啊 mysql绝对没问题,我这做测试都是上百万条单表

读书人网 >软件架构设计

热点推荐