一定要先弄清是什么地方的问题再去优化,错误的优化反而可能造成新的瓶颈;另外,不到万不得已,不要改变系统架构。
(刚才为这个主题,敲了半个小时,提交的时候报错告诉俺登录,可俺已经登录过了啊!敲的东西全丢了,实在影响心情!)
(刚才为这个主题,敲了半个小时,提交的时候报错告诉俺登录,可俺已经登录过了啊!敲的东西全丢了,实在影响心情!)
ejb其实是一个pool 和cache的结合,pool用来增加会话Bean个数,保证每个线程独占一个会话bean,Cache是用来加速实体数据的。
现在大家发现,J2EE系统其实和以前的数据库系统差不多,但是为什么要用J2EE这样的中间件系统,其实说白了,就是将以前数据库做的很多事情分派到J2EE服务器来做。
因为J2EE服务器做成集群分布式比较容易,成本低,而做两台数据库集群则比较昂贵。这也是使用中间层技术的一个性能考量。
以上只是个人愚见,欢迎大家讨论。
也许这么说了大家还是不明白,我就简单的把这张表的结构说一下
字段假设为
id1,id2,id3
(关联外键,不只三个,用户的权限就是这些id值不同组合,用户自己配置)
value1,value2,value3
(目标值,用户可以通过计算或不计算得出结果,要命的是要对结果排序)
有了上面的介绍,大家觉得怎么才能优化速度呢.
>一是对于用户重复点击的处理。
>二是tomcat连接池的配置。
1. 用户重复点击不应该限制,恰恰相反,使用Cache可以解决用户重复点击,因为他们反复读取的是同一个数据。
2. tomcat连接池调整幅度是有限度的,有人认为几亿次查询是小查询,我真感觉我是孤陋寡闻了,至少我是把一段时间内的几亿次查询看成是一个大访问量。
我之前提出了一个分布式Cache的解决方案,这个Cache可以自己做,使用JMS进行服务器之间通知,TSS有相关文章。
还有可以使用Jgroup, 这是JBoss集群的基础技术,因为你没有使用EJB,是裸体JavaBeans,那么就依照EJB容器底层实现,再做一次吧。
其它据我所知,没有其它更值得一试的方法了。
1.设定cache算法,采取LRU (Least Recently Used)算法,当然不可能对所有数据缓存了。以这三个外键为key做缓存。
2.结果排序使用Java的Collection,在内存中做,分担数据库计算。
3.在上面两步基础上,使用分布式Cache或Jgroup(或自己编制Socket),实现多台服务器缓存同步。
绝对有效,信不信由你。:)
优化系统,原理其实很简单,当然做起来很难,:),就是在一
个管道上找到最窄的地方进行拓宽,搞定后再重复这个步骤。
看楼主的系统来看,500用户并发量并不是很大。又只是从数据库
取出几百条记录,可见瓶颈是在数据库了。
推荐一下:
1、分担数据库的负荷
1)如果tomcat的主机空闲,将数据库上的一部分操作挪到tomcat
上做,具体挪哪些还要看你的应用。
2)硬件条件允许的话,对oracle做RAC
2、减少对数据库的查询次数
1)做cache,,这里的cache包括两种
a、浏览器层的cache,最高效,首选。适合单用户有连续相似的操作
b、tomcat层的内存cache,高效,备选。适合单用户无连续相似的操作
,而且多用户有连续相似的操作。
以楼主项目的500用户数来看,一定要绞尽脑汁去实现 a 方法
2)引导、限制用户的不良使用习惯,“用得不怎么爽”跟“根本用不了”
如果是我肯定会选择前者
3、减少耗资源高的数据库查询操作所用的时间
1)优化sql语句,没什么可说的,找出你们效率最差的十条sql,依次
摆平。如果摆不平返回做下面的2)
2)根据应用的业务逻辑对数据库的表设计进行优化,分表是一个
比较不错的选择,你们的系统不能分,我不知道是不是因为考虑
的不够深入。
根据80/20原则,根本方法是解决成为杀手的那20%。
仅仅靠提高硬件性能是很难彻底解决问题的。
想出来的一些解决办法:
1。杜绝重复点击,避免web、数据库访问的恶性循环;
2。优化sql语句,坚决不要使用复杂sql,所有的复杂sql拆分成简单的多条sql;
3。分析用户访问的可能性大小,将结果预先进行分类,建立相应的临时表(或者叫做cache表),数据库查询优先从这些表里取,若无结果,再去查原始表;
4。做其它缓存,如单用户连续访问cache、多用户相似请求的cache等等,可以借助2的结果。
其实3是文件级cache,4是内存级cache。
但不管怎样,因为俺们没有见到你的真实系统,多数还是猜想,你一定要弄清真实的瓶颈在哪里,不要优化半天,发现优化了错误的地方。
还有,可能很多人都不同意但俺自己一直坚持的,不要轻信那些看起来很美的技术,包括EJB、所谓的分布式等等,具体问题永远具体分析。
本猪基本同意warning第一次的意见:基本上问题的发起人还没做做基础的性能分析,大家已经在畅所欲言,有点象一帮医生,听病人说了个大概病情(譬如不能走路),就开始拿刀、拿锯了.......
So......
也许对你有帮助
2。防止页面刷新。
3。优化数据库,DBA的水平对数据库的性能有比较大的影响。
4。硬件。