单纯的从MySQL的角度出发,单台MySQL的数据库负载到每天上亿次的操作(每秒大概1100次MySQL操作,然后乘以86400)应该不是非常困难的事情。但当PV超过百万的时候一台WEB早已经不堪重负了。有几个解决方案:



数据分表处理:对已经成型的系统,如果是独立开发的系统在架构前期就进行数据的同步分区还是不错的。但是如果是一台DB服务器依然不能减轻MySQL的负载。


利用MySQL的主从构架:在Mysql的Master/Slave模式中,Slave主要是来备份数据的,只有当Master出现故障时,Slave才会接过Master的服务,对外部请求进行处理,直到Master恢复正常。就是说:在Master/Slave中,要么是Master在服务,要么是Slave在服务,不会Master/Slave同时提供服务。使用MySQL主从依然不能有效的降低MySQL的负载。


MySQL分区:分区允许根据指定的规则,跨文件系统分配单个表的多个部分。表的不同部分在不同的位置被存储为单独的表。MySQL从5.1.3开始支持Partition。MySQL5.1中的MySQL分区(MySQL Partition)是个很好的东西,它允许根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。这个是当前情况下,最积极有效的降低MySQL负载的解决方法之一。但目前没有充分的案例表明它是稳定的或者不稳定的。



使用Memcache:在用户环境需求等特定条件下,缓解MySQL负载比较有效的方法就是使用Memcache。Web Server(Lighttpd、Nginx、Apache)对CPU要求高,对内存要求低;而Memcached Server是对CPU要求低,对内存要求高,所以可以搭配使用。在对前端的Web Server上安装Memcached Server是可行的。可以用最少的付出,获得最大的收益。对于一个架构合理的系统来说,添加Memcache的支持可能只是一个批量处理文件的过程。