MySQL分库分表

1、传统项目结构

 2、数据库性能瓶颈

① 数据库连接 数据库连接是非常稀少的资源,MySQL数据库默认100个连接,单机最大1500连接。如果一个库里既有用户相关的数据又有商品、订单相关的数据,当海量用户同时操作时,数据库连接就很可能成为瓶颈。

② 数据量 MySQL单库数据量在5000万以内性能比较好,超过阈值后性能会随着数据量的增大而变弱。MySQL单表的数据量是500w-1000w之间性能比较好,超过1000w性能也会下降。

③ 硬件问题 因为单个服务的磁盘空间是有限制的,如果并发压力下所有的请求都访问同一个节点,肯定会对磁盘IO造成非常大的影响。

数据库性能优化

① 参数优化 ② 缓存、索引 ③ 读写分离 ④ 分库分表 (最终方案)

 4 分库分表介绍

4.1 使用背景

当表的数量达到了几百上千张表时,众多的业务模块都访问这个数据库,压力会比较大,考虑对其进行分库。
当表的数据达到了几千万级别,在做很多操作都比较吃力,考虑对其进行分库或者分表

4.2.1垂直切分

按照业务模块进行切分,将不同模块的表切分到不同的数据库中。

4.2.1.1 分库

 4.2.1.2 分表

按照字段将大表拆分成小表,另当表中含有Blob、Clob(用于存头像、小图片等)等二进制类型的字段时,因其不能使用索引,考虑性能问题需将其拆分出来。

4.2.2 水平切分 

将一张大表按照一定的切分规则,按照行切分成不同的表或者切分到不同的库中。

4.2.2.1 范围式拆分

好处:增删数据库实例时数据迁移是部分迁移,扩展能力强。
坏处:热点数据分布不均,访问压力不能负载均衡。

 

4.2.2.2 hash式拆分

好处:热点数据分布均匀,访问压力能负载均衡。
坏处:增删数据库实例时数据都要迁移,扩展能力差。

4.2.2.3 水平切分规则

① 按照ID取模:对ID进行取模,余数决定该行数据切分到哪个表或者库中。
② 按照日期:按照年月日,将数据切分到不同的表或者库中。
③ 按照范围:可以对某一列按照范围进行切分,不同的范围切分到不同的表或者数据库中。

4.2.3 切分原则

① 能不切分尽量不要切分。
② 如果要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值