码工级别:在编写程序时注重一些细节,如
(1)对不用的对象及早赋NULL值,以加快GC的回收速度,释放内存
(2)如生成容器类时,如果new时就能预测到容器容量,则一般直接设置容器类的容量大小,以避免后来使用时的不断扩容
(3)在全文检索时Field,Document使用一个对象而内部的值通过set方式设置而避免new大量的对象
(4)再如statement和preparestatement以及批处理等
(5)局部变量的作用范围尽可能小,循环块的优化等等
设计级别:
(1)如对无状态的对象使用池化的思想
(2)使用多线程的理念
(3)异步设计的思路:在互联网的MVC设计时方式,为了加快页面的影响速度,往往把MVC做成简单地增删改查,而把复杂的业务逻辑交由后台的任务去处理,比如彩票追号系统中收到中彩网的期中奖信息后,会存储到库表中,用户通过页面往往无法立即获取中奖金额等等,这些信息往往通过后台程序汇总之后插入表对应字段后,用户搜索时才能直接显示信息,再比如51job上申请一份工作后会有这份工作的竞争图表统计信息,用户进入页面时往往不显示这个图表,当点击link时才会到后台取数据汇总,甚至此时也不汇总,而直接交给后台work一天0时汇总一次。
(4)为了增加用户的响应速度,在设计数据库表时,往往增加一些冗余字段,这些字段往往直接显示其它若干个字段的联合计算信息等等。
(5)使用缓存技术(如Memcached)加快访问速度同时也减少DB的访问压力。
系统级别:采用集群的方式,可以用应用服务器自带的集群,也可以用硬件集群技术F5,radware等。2.通讯级别
EJB(传字符串还是序列化对象),webservice(restful),MQ,ActiveQ,ICE等,在通讯层业务逻辑尽可能简单,如QDQF的系统设计。
3.DB级别
(1)SQL语句级别:如in和exist等,同一个操作使用效率最高的操作SQL
(2) 表级别:
索引的建立
表的分解(又包括数据库的逻辑分区(oracle),以及物理分表。如把一个全国表分成36张省级表)
(3)DB:表空间,排序区设置以及一些优化策略
读写和查询操作的分离,如读写统一交给一个库来处理。查询交给另一个库来处理,同步由数据库来保证
(4)对业务表的扫描转移到消息表的扫描,当消息表的扫描也无法支持时,可以考虑扫描动作交给NOSQL的数据库来处理。如任务处理引擎里就使用redis(缓存)和mongdb来处理消息任务。