首先,系统架构都变的话,动的就不是小手术了。人力成本不可能接受
再者,改了架构是不是就能有改进,未知数。
ejb是有用,但有用他的地方,要是什么地方都他最大,我们做设计就不用这么麻烦,sun公司也不必又弄ejb3.0又弄jsp2.0。
cache是有用,但cache还有个命中率的问题。没有cache,那么cache的命中率当然是0,如果加上cache,但cache的命中率只有1%,那还不如不用。因为,cache的同步涉及的问题就不是一点点,处理起来也是要时间,当然,更要内存。
再回到你的问题:
操作:几亿条中,经一些条件,选出几百条。
问题:访问一多,web服务器的链接池占光,系统僵死
对吧,是这个问题
这里有一点点,我还有点不清楚,“僵死”,具体指的是什么
对于其它的不带DB查询的jsp也“僵死”了?还是说,只是那些带查询的死了。我想你说的应该是后者吧。
补充问一下,你的Web服务器和DB服务器是分开的吧,如果在一台机器上,想想应是不会有人这么做,我有些太多心。
好,怎么处理呢
首先,不太可能的方法:
EJB不太可能,原因很简单,cache命中率,
有人也许会说,银行呢,那用户还不多啊,ejb运用常见例子啊,不过,要注意一点是,那里主要体现了事务,另外一点是数据持久。当然最后一点,也有与cache相关的:用户进行一系列业务操作,他要重得用到那几个数据实体,虽然第一次业务操作的cache命中率几乎为0,但随后的几次就100%了!当然提速。
但,上面的一切说话,在你这里不通用。你这里就是一个查询,就是因为这个查询,在很多用户同事来访问时,服务器“僵死”
那么,要怎么做呢,我觉得你可以从以下方面着手:
一是对于用户重复点击的处理。
二是tomcat连接池的配置。
关于一:
你只要在那几个会涉及大量数据查询的jsp引入一些判断,比方,同一个人在5秒之内不许连续查。在session中加个变量记录下时间就可以了,查询前做一下判断,就可以做到防止重复点击,实现很简单是吧:)
关于二:
要用两套连接池,一个给大量数据查询的用,这个连接池你就要限制严格些,比方,将最大连接数就设为5,最多5个人同时查。
与此同时,你的那几个涉及大量数据查询的jsp页面也要改动一点点代码。另外还要注意的就是,改动的代码中要注意到这样一个问题:如果你的jsp在取连接池没有取到连接时,jsp要立即结束运行,注意是立即,不要因为在等着连接池给你连接而挂在那里,千万要注意!!!不然,WEB服务器也会因为挂的线程变多而“僵死”。
另一个供数据量少查询用,连接池就可设多些,可以设50或100,就看你oracle的能力了。
这样做以后,可能依然会有一个问题:大量数据查询的jsp,会经常出现查不到,这时,如果用户还不能接受,那么你要将这几亿数据的表单独放一DB服务器,甚至做集群了。
但从你们的业务看应该不会到做集群的地步。我觉得你们的DB,还是做得不够优化。
为什么呢,因为,像计费系统,里面的表数据相对一般业务可以算是很大了。几亿数据的查询都不会到做集群的地步。
我建议,在oracle配置方面、SQL的优化、表索引这些方面,你们还是要再考虑一下。
我上帖曾提过一下表的拆分,效果应该是比较明显的,只是拆分要注意是根椐查询条件的设定做表的拆分,拆得不好等于没拆,但我不知你们的实际查询业务是怎么个样子,在表拆分后相应的逻辑语句,查询语句是怎么个改法。所以不好下结论。