-----海量数据的解决方案-----
point 1.缓存和页面静态化
缓存的作用是降低数据库的压力.
缓存的使用方式:
a>通过程序直接保存到内存中(map concurrentHashMap)
b>使用缓存框架(Ehcache,Memcache,redis)
页面静态化: 在程序中使用模板技术生成,如常用的Fremarker和Velocity都可以根据模板生成静态页面
(另外也可以使用缓存服务器在应用服务器的上一层缓存生成的页面,如squid,nginx也有相应的功能)
point 2.数据库优化
1)表结构优化
2)sql语句优化
3)分区(当数据变多的时候,就可以采用分区或者分表)
将一张表中的数据按照一定规则分到不同的区来保存. 查询数据的时候, 根据规则到相应的区中查找数据
4)分表
如果一张表中的数据可以分为几种固定不变的类型,而且如果同时对多种类型共同操作的情况不多,那么都可以通过分表来处理.
另一种分表的方法是将一个表中不同类型的字段分到不同的表中保存.
5)索引优化
6)使用存储过程代替直接操作
point 3.分离活跃数据
定期将不活跃数据分离到不活跃表中, 每次调用查询该表的数据时,首先先查询默认表,默认表中查不到再到不活跃表中查.
point 4.批量读取和延迟修改
1)批量读取
通过减少操作次数来提交效率.
批量读取时将多次查询合并到一次中进行, 在高并发的情况下,将3秒或5秒内的所有请求合并到一起统一查询数据库,这样可以有效减少查询数据库次数.(异步请求)
2)延迟修改
主要针对高并发而且频繁修改(包括新增)的数据.
现将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存到数据库中.
程序在读取数据时可以同时读取数据库中和缓存中的数据.
point 5.读写分离
读写分离的本质是数据库集群,在高并发的情况下,将数据库的操作分配到多个数据库服务器去处理,从而降低单个数据库服务器压力.
但是有个重要的问题要解决: 保证多个数据库的数据一致性.
如果多台数据库服务器都可以处理写操作,那么多台数据库服务器数据之间同步就变得很复杂. 通常都是交由指定一台服务器进行写操作.
负责写操作的数据库服务器叫'主服务器',当主服务器写入数据(增删改)后,底层同步到其他服务器'从服务器'.读数据的时候到从服务器读取.
读的操作可以分配到多个从服务器中.
如果从服务器过多, 主服务器数据同步也可以分批同步到从服务器.