海量数据、高并发优化方案
1.页面优化
(1)减少请求次数
通过合并CSS和Javascript文件,来减少请求次数。
(2)压缩CSS和Javascript代码。
通过对文件代码内容删除换行和空格来减少代码存储空间。
(3)优化图片
通过对图片进行截取和缩放大小来优化图片,加快图片加载速度。
(4)静态化
利用FreeMarker将数据库数据静态化成html文件来提高访问速度。适用场合:对于含有不要求实时性的内容的网页可使用,如网站首页,各模块首页的新闻,公告等等。
2.后台java代码优化
(1)Ehcache
使用Ehcache可以结合AOP,做业务层的方法缓存,以类名、方法名、参数名作为key,结果对象作为value。适用场合:对数据不经常更新,查询方式比较固定。
(2)多线程
适用场合:群发邮件,大批量处理图片。
3.数据库优化
(1)分表
通过对记录ID取膜或时间维度的规则进行分表。
(2)分区
Oracle数据库支持分区,可以根据某个列的数据规则进行分区。
(3)中间表
将原数据根据想得到的目标数据进行一系列的处理做出一套中间表,直接从中间表中进行查询,通过定时调度定时更新中间表。适用场合:对数据内容实时性要求不高,如:数据分析。
(4)历史归档
可根据时间整理出很少用到的数据集抽到历史表中,数据表只留常用数据。适用场合:对历史数据极少访问。
(5)列式存储
MySQL开源数据仓库Infobright,对高压缩比数据存储,查询速度可提高5~60倍,免费版不支持DML语句,不支持高并发,只能支持10多个并发查询,可通过load导入csv数据文件。适用场合:对数据不经常更新并且实时性要求不高,如:数据分析。
(6)查询缓存
MySQL Query Cache,Oracle Result Cache,可通过修改数据库配置文件来实现查询缓存,sql语句作为key,结果作为value的缓存方式,当数据表发生改变时相应的cache就会失效。适用场合:对数据不经常更新,查询方式比较固定。
(7)建索引
对于使用较复杂的sql,对大数据量表查询时候,可采用建索引的方式,将涉及到的查询条件字段,可提高查询速度。
(8)sql优化
sql语句中,select后尽量明确字段名来代替*来减少查询列。尽量少使用in关键字,可通过left join和exists关键字取代。
(9)存储过程
存储过程只需编译一次,适用场合:当对数据库进行复杂操作时。如:多表的查询,计算,更新。
4.JVM调优。
5.应用、数据库服务器集群,读写分离。