MySQL处理海量数据架构优化

MySQL处理海量数据架构优化

业务优化

  1. 业务分流
  2. SQL语句优化

架构优化

  1. 分表分库
  2. 读写分离
  3. 数据缓存

硬件优化

  1. 硬件配置

数据库优化

  1. 引擎选择
  2. 逻辑改造
  3. 索引

Mysql处理海量数据架构优化三大方法:分表分库,读写分离,数据缓存

分表分库

根据某些条件把大数据分割成多个块,把每个块存放在不同的数据库(数据表中)。该方法是提高性能的最有效的方法

根据业务拆分(垂直拆分)

模拟情景:
做一个系统包含模块资讯(New)、博客(Blog)、论坛(Bar)。

问题:论坛数据猛增,访问压力变大
解决:将存放Bar数据的数据库进行分库

问题:论坛帖子数量持续增长,访问吃力
解决:继续将存放帖子的数据库进行拆分
水平拆分:
将帖子数据拆分成12个数据库,妹三个数据存放到一台数据库服务器中

问题:单个数据库db1中单表数据量过大
解决:db1中进行分表

垂直才分也叫行拆分(Row Splitting),就是把组成一行的多个列分开放到不同的数据库(数据表)中,这些表具有不同的结构。垂直分表就是“业务拆分”

水平拆分:水平拆分就是把一个表分成多个表,每个表的结构一样,但是储存的数据不一样。

读写分离

对存放帖子的数据库服务器Server2_1_1进行读写分离

Mysql的读写分离是通过Mysql代理实现的,Mysql代理是介于Mysql客户端和Mysql服务器之间的简单程序,用来分析或者传输他们之间的通讯,最大的优点就是:读写分离。

数据缓存

到现在论坛已经可以很好地支持海量数据的存储了。但是我们发现系统的资讯模块有访问吃力。我们在资讯模块添加缓存服务器。

访客首先访问缓存服务器,因为缓存服务器的数据都是在内存当中所以速度会很快,如果缓存中找不到数据再去Server1中查找数据,并且把数据缓存到缓存服务器中

其他优化

  • 至少要有一个热备
  • UPS
  • 做合适的RAID。RAID0+1,RAID5或者RAID6
  • 使用xfs而不是ext3
  • 将数据库数据放入盘柜。更安全,访问更快
  • 使用64位系统
  • innodb适合写频繁的表,myisam适合读频繁的表
  • 建立正确的索引
  • 优化my.cnf里面的参数。主要关心和buffer有关的参数
  • 打开slow_query_log选项。解决出现的慢查询语句。
  • 使用SAS而不是SATA。数据库对硬盘要求很高

参考文档

MySQL处理海量数据架构优化

MySQL其他优化内容

SQL语句优化

MySQL索引