MySQL 数据库如何解决高并发问题

所属分类: 数据库 / Mysql 阅读数: 1069
收藏 0 赞 0 分享

前言

我们都知道初创公司一开始都是以单体应用为首要架构,一般都是单体单库的形式。但是版本以及版本的迭代,数据库需要承受更多的高并发已经成了 架构设计 需要考虑的点。

那么解决问题,就得说到方案。但是方案有很多,我们该怎么选择呢?

优化与方案

基本上,我们优化要从几个关键字入手: 短距离 , 少数据 , 分散压力 。

短距离

所谓的短距离,指的是从前端到数据库的路径要短。

  1. 页面静态。有些页面的数据是在某些时段是不变的,那么这个页面可以静态化,这样可以提高访问的速度。
  2. 使用缓存。缓存大家都知道,快的原因就是基于内存。所以使用基于内存的缓存的话,可以减少对数据库的访问,同时加速访问速度。
  3. 批量读取。高并发的情况下,可以将多个请求的查询合在一次进行,以减少对数据库的访问速度。
  4. 延迟修改。延迟修改的意思高并发的情况西可能是将多次修改数据放在缓存中,然后定时将缓存中的数据过更新到数据库;也可以是通过缓存的同步策略通过解析异步同步到数据库中。
  5. 使用索引。这个不用说了,索引有着比较多的类型,例如普通索引/主键索引/组合索引/全文索引等。

少数据

所谓的少数据,其实是查询的数据要少。

  1. 分表。所谓的分表,其实有水平切分和垂直拆分。玩过单机的小伙伴都知道,往往一些具有历史性的表单,都会有成百上千万级别的数据。这样子对于 MySQL 来说,即使是加了索引,SQL 方面继续优化,也很难做到更快的查询速度。那么我们可以通过分表的操作来实现。例如说最常见的我们可以根据时间的维度来进行表的水平拆分,今年的数据保持下来,而去年的数据可以存在另外一个表里。
  2. 分离活跃数据。其实这个有点类似缓存,但是不同之处在于数据还是在 MySQL 上面的。例如一个查询商品的业务,有一些火爆/经常被搜索的商品可以存在一张活跃表。查询的时候先查询活跃表,没有的话再查询总商品表。
  3. 分块。这个分块有点类似于算法里面的“索引顺序查找”。通过数据层面的优化,将数据放在不同的块中,而我们只需要计算找到对应的块就行了。

分散压力

所谓的分散压力,其实是分散不同数据库服务器的压力

  1. 集群。集群的概念相信大家都很清楚,对于业务服务器来说其实就是具备相同业务流程的服务器部署多台,通过负载均衡或其他方式来将请求分配到不同服务器。而数据库也一样,通过特定的规则策略将数据导向特定的数据库服务器上。
  2. 分布式。所谓的分布式,其实就是将原本处于同个流程的业务逻辑分配到不同的服务器上面执行,达到了“并发”执行的效果,加快执行速度。
  3. 分库分表。分库分表主要是水平拆分和垂直拆分。对于访问频率高而数据量巨大的单表,可以减少单表的数据,根据特定的维度进行水平拆分,增加数据库的吞吐量,这就是 分表水平拆分 ;而对于业务耦合性低的多表来说,可以将不同的表存储在不同的数据库上,对数据库进行垂直拆分,提高数据库写的能力,即 分库的垂直拆分 。
  4. 建立主从。建立主从的目的其实就是为了读写分离。我们都知道,只要数据库的事务级别够高,那么并发读是不会影响到数据的混乱,而并发写则会。所以建立主从一般来说,写会留在主服务器上写,而会在从服务器上读。 所以基本上让主服务器进行事务性操作,从服务器进行 select 查询。这样子的话,事务性操作(增加/删除/修改)导致的改变更新同步到集群中的从数据库 。

结语

以上就是MySQL 如何处理高并发的详细内容,更多关于MySQL 高并发的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

Mac 将mysql路径加入环境变量的方法

这篇文章主要介绍了Mac如何将mysql路径加入环境变量,有需要的朋友好按照下面的步骤操作即可
收藏 0 赞 0 分享

mysql 增加修改字段类型及删除字段类型

本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql主从复制(master-slave)实际操作案例

这篇文章主要介绍了Mysql主从复制(master-slave)实际操作案例,同时介绍了Mysql grant 用户授权的相关内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL异常处理浅析

这篇文章主要介绍了MySQL的异常处理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL存储毫秒数据的方法

MySQL中没有可以直接存储毫秒数据的数据类型,但是不过MySQL却能识别时间中的毫秒部分。这篇文章主要介绍了MySQL存储毫秒数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySql中使用INSERT INTO语句更新多条数据的例子

这篇文章主要介绍了MySql中使用INSERT INTO语句更新多条数据的例子,MySQL的特有语法,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows下MySql错误代码1045的解决方法

这篇文章主要介绍了Windows下MySql错误代码1045的解决方法,文中还包含了2个Linux下的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

这篇文章主要介绍了mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql的中文数据按拼音排序的2个方法

这篇文章主要介绍了mysql的中文数据按拼音排序的2个方法,用于一些特殊环境,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL定期分析检查与优化表的方法小结

听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法
收藏 0 赞 0 分享
查看更多