问题描述
各位,在下混迹javaEye已经小有年头了,虽然做过很多项目,却都不上规模,现在遇到一些问题,自己很难解决,求 教于各位,望大家不吝赐教。 我手里有一个论坛性质的项目,内网使用,活跃用户两三千,最大并发不过一百。现在的服务器是一台很差劲的机器,甚至还不如我现在的pc快,数据库 appServer 都放在这台机器上的,项目是java6 +weblogic10+oracle10G,今年开始,数据库涨的很凶,光发帖都有好几百万了,还不说评论和回复,我已经尝试做了如下的事情:优化SQL,重新检查和优化索引,使用memcache做部分缓存(memcache也放在这一台机器上),部分页面静态化等等,可是我这是也是sns啊,不可能所有的东西都放到cache或者做成static page,现在的一个瓶颈在于子页面的分页列表性能很差,差不多两秒才能用ajax加载出来,这里面有很多on-time的东西,比如某个帖子的点击次数,最新的评论,用户的动态等等,我想过把这些全部放到memcache中,可是如果人家点击帖子,更新了点击次数这种频繁的操作也要更新cache的话,这个cache也就没有意义了,我还想过改用nosql,也用monggoDB来测试过,性能是没有问题,可是这个项目有还多的统计和复杂查询,而且还比较大,改用no-sql代价太大。 我现在遇到的问题应该是很多小项目都会有的问题,请各位赐教。(ps:机器短期内不能再加了)
解决方案
你已经做过这许多尝试了,看上去空间很小啊。我能想出来,供你参考的地方。1. weblogic10+oracle10G 这2个东东很重的吧?分别换成Tomcat+MySQL(PostgreSQL)组合着试试呢? 至少,Oracle很是大材小用的样子。低配的机器上反倒是吃资源。2.业务上有调整空间吗?引用一个瓶颈在于子页面的分页列表性能很差 比如这个问题所在的‘分页’,或者不要该功能;或者变成模糊式的(比如只显示有很多页,但不确定具体页数以减少处理);打马虎眼(比如加个美眉的Loading...动画养养眼,劝用户休息下喝口水啥的哈!)在我看来,已经做得很好了。低配置 + 千人基数百人同时在线 + 内部使用程序2秒的响应?!Perfect! 还有个歪门邪道,加机器!不给加是吧,把自己的机器用上好了。哇哈哈!
解决方案二:
有这个功夫买台新机器都够了。全新的一台入门服务器才1-2W,顾这么个程序员折腾几个月比买机器还贵。
解决方案三:
说真的,数据库和webapp还有memcached都放一台服务器上,还是oracle+weblogic的组合,2s的响应时间,lz已经做得很棒了。不过count这些值不要实时去更新数据库,放到memcached里面实际上是可以的,然后cache中的值每到一定数的时候再去更新数据库(可能会丢)
解决方案四:
楼下正解,去除count,在写操作的时候把那些计算结果都更新掉,逻辑上保证一致性就好了。
解决方案五:
把一些on_time的东西固化,像发帖数之类的,一般都是固化在一个表里,而不是实时去count一下帖子表。
解决方案六:
你还少样东西,MQ