我现在慢慢发觉,搞JAVA的人有一个通常的特点,就是对JAVA相关的东西无限崇拜,而对除JAVA之外的所有东西都看小,认为不值一提,认为JAVA就是一切,认为JAVA就可以解决一切,其它所有都变得不重要了,OS,数据库,通通都不值一提了。我怀疑某天banq会起个大标题,操作系统的综结,那更加是笑掉大牙了。
事实上是这样吗?真的可以忽略数据库了吗?真的以为J2EE容器可以解决一切吗?按照我的经验,在大数据量高并发的情况下,数据库真是少做点优化都不行,整个系统都运行不了。我曾在两家国内最大的门户网站工作过,里面的数据量大得惊人,而且访问量也惊人,banq见过成千万记录的表,几十G的数据库,而且每秒并发接近一千吗?真是少优化一点都会死人。有时候还要对DB采取一些非常规的优化。建表的初期就要对其表结构等斤斤计较,这样才顶得住这么大的负载。忽略数据库,让EJB容器去调优?让O/R Mapping工具去帮你自动生成表结构?笑话啦,恐怕给多十倍的硬件都顶不住。
别跟我提J2EE的cache,如jbosscache之类的东西。这个开发过JAVA应用的人都知道,不是什么很高深很值得吹的东西,而且它解决不了所有的问题。而且不太成熟。相比之下,各种DBMS内部久经考验的查询缓存更是值得留意。我更加信赖DBMS内部的查询缓存,更成熟更可靠。而且这两点根本不矛盾。我不介意你在app server加缓存,但是这并不能解决所有的问题,更加不能代替数据库方面的优化。
另外说点题外话,虽然我平时也是搞JAVA居多,我也很喜欢JAVA的优美。但项目上的一些事实还是应该不带有色眼镜去客观地看待的。在我们这边,apache无论遇到多大的负荷,从不崩溃过。我们这年的习惯是每年春节前重启其一次,虽然没这个必要。mysql之类的东西负荷更加重,但也极少崩溃,始终稳稳定定。但是resin/tomcat之类的,重压之下就有点难顶了。无论怎么优化,平均两三星期肯定需要有一次重启的。resin会好点,tomcat更加不行。拥戴JAVA,J2EE是件好事,JAVA也是一个好的东东,但也要注重事实。OS(UNIX),数据库,httpd等这些都是人类智慧的结晶,不是随随便便看两本J2EE的书就嚷着去可以取代的。