高性能MySQL(一) 如何做到高扩展性

吞吐量: 单位时间内处理的请求数

TPS: 每秒处理的事务数

QPS: 每秒处理的查询次数

三个方法论

1.Shared Everthing

针对单个系统,完全共享CPU,Memory,磁盘系统,这样并行处理能力最差,比如SQLServer

2.Shared Nothing

不存在共享资源,并行和扩展能力更好,比如hadoop

3.Shared Disk

各个处理单元,使用私有的CPU,Memory,但是使用共公有的disk

纵向扩展:

扩展一个点的能力支撑更多的请求,类似于螳臂当车:

两种方式:

1. 提升硬件性能 

比如CPU,内存大小,更好性能的网卡

2. 提升单机架构性能

读多写少,用cache;读少写多,使用消息队列,异步更新,比如kafka,RMQ

使用无锁算法,比如CAS

分区就是PARTITION, RANGE分区,就是比如把表的数据按时间分成,70年代,80年代,90年代的数据,HASH分区,就是把表的数据根据HASH值的不同分成不同的区

横向扩展

用更多的节点支撑更大的请求,类似于蚂蚁搬家,主要有4种方式:

1.主从复制

主库用来读写,从库用来读,提升读性能

2.分库分表 (数据分片 sharding)

分库、分表、达到线性扩展的目的

关于分库分表,可参考博客 什么时候进行MySQL分库和分表? - 扁豆一号 - 博客园

分库和分表,是两个概念

分库

一开始是一个服务,一个数据库

然而这样会造成系统臃肿,很难维护,因此需要把服务拆分为多个服务,并且服务共用同一个数据库的

 但是这样的问题是,随着业务越来越大,I/O连接数过高会导致数据库访问的压力越来越大,因此需要分库,这样系统能承载更多的数据库连接,相对的并发量也就越高

分表

分表是,数据量变大时,查询会变慢,因此分表能提升查询效率,一般数据量超过500万,就要考虑分表,不过500万只是经验之谈

总的来说: 分库增加QPS并发量,分表提升查询性能

我的项目记得是,按时间来分库到sms_record_0 和 sms_record_1中,然后分表是用sharding来做的,就是插入数据用sharding来写,查询时也是根据sharding来查某个表,sharding到哪个表具体是根据手机号来决定的应该

商家和用户怎么分表的问题

算是比较经典的一个问题,具体解决方案是,根据商家id来分一次表,根据用户id再分一次表,相当于我们有一份冗余表,然后不同类型的查询走不同的表,通过分布式事务或是其他方式保证两个表的数据一致性

分页查询limit OFFSET = 1000000,  N = 10 时为什么会慢?

这是因为查询时 MySQL 并不是跳过 OFFSET 行,而是取 OFFSET+N 行,然后放弃前 OFFSET 行,最后返回 N 行,当 OFFSET 特别大的时候,效率就非常的低下。

in在哪种情况下走索引

参考 ​​​​​​https://segmentfault.com/a/1190000023825926

一句话,in里面的值太多,就不会走索引

3.数据库中间件

比如rmq,kafka,来达到读写分离的目的

4.集群

使用集群来弥补单机性能的不足(这里忽然想到分布式和集群的区别,分布式就是不同机器上面部署着不同的服务,而集群就是不同机器上面部署着相同的服务)

主从复制

是最常用的技术,可以扩展出很多的从库,从而减轻主库负担,能够实现读写分离

缺点:如果写过多,主库成为性能瓶颈,从库数据容易不一致

为了解决这个缺点,就得想办法做sharding

数据分片

1.垂直分片

其实就是按column列分片,某几列属于同一片,另外几列属于另一片,比如把一个表的12列(12个字段)分成3个小片,每片4列

 

2. 水平分片

就是不修改表结构,比如按时间来进行拆分,比如2021年1月1日之前的数据存在A库,之后的存在B库

虽然sharding很好用,但是这样会加大业务代码的复杂性,而且单个shard失效可能会导致整个系统不可用(这种情况,就得考虑主从复制,对每个shard都备份一个或者多个从库)

分区是库内的,分片是库外的 

数据库中间件

需要多注意,主从复制的各种小分类

不同主从复制的开启方法

 

 集群架构, 这个我真看不懂。。。。

 

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值