今天我们来学习MYSQL的分库分表
- 面对访问数据库海量数据的情况,这张图带你解决数据库压力问题

- 1、为什么要进行分库分表???
分库分表是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据性能的目的。

- 2、什么是分库分表???

- 3、分表的优点???

- 4、如何分库???

案例:将商品信息表和商品描述表放在商品库,店铺表放在店铺库。


案例:将商品表分成两个字段类型一样的商品表,分到两个不同的服务器数据库中。


垂直分库:把不同表分到不同的数据库中(商品表和店铺表)
水平分库:把不同数据分到不同数据库中(商品表分成两个类型一样的表分到不同数据库中)
- 5、如何分表???

- 垂直分表: 将一张海量数据的表按照使用频次垂直切分,例如:用户表中多个字段,用户信息、用户学习、用户工作,将按照他们的使用频次垂直切分到不同的表中,减少单表的访问压力。
案例:将商品信息表按照访问频率分为两个表,商品信息和商品描述表



案例: 将同一个库中的商品表的数据分成两个商品表中,可以在一个或多个库中


垂直分表和水平分表的区别:
垂直分表: 将一个表按照字段访问的频次分到多个表中,可以是一个或多个数据库(分的是字段) 水平分表: 将一个表按照数据分到多个表中,可以是一个或多个数据库(分的是数据)
- 6、水平分表面临的困难及开源产品
数据库代理方式访问:

非代理方式访问:SQL语句直接访问数据库服务器,比代理方式访问快。


- 7、基本的实现思路:
1、解析路由(找对应数据源、表):根据业务功能、SQL解析等方式,找到要访问的数据源和表
2、执行相应表的功能(根据sql实现具体功能)
3、对查询结果集进行合并,二次处理。(合并查询结果集,执行子查询)
4、是否有事务(处理不同方式的事务)

- 8、实现的层面
推荐使用DAO层实现方式

- 9、小结

- 10、分库分表带来的问题
分库分表能有效的缓解单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接属的瓶颈,同时也带来了一些问题
1、事务一致性问题
分库分表把数据分布到不同的数据库服务器,不可避免带来分布式事务问题
2、跨节点关联查询
本来可以通过join连接查询的sql语句,现在得两次查询
第一次:查到关联数据的id。
第二次:根据id找到对应的数据。
3、跨节点分页、排序函数
合二为一


全局主键解决主键重复问题

例如:地区表(商品表和店铺表的依赖公共表)
在每个数据库服务中都建立公共表,所有对公共表的更新操作都同时发送到所有分库执行。
小伙伴们,对于MYSQL数据库的分库分表理论就介绍到这里了,下期我们用sharding-JDBC框架来实现吧!!!
get到的小伙伴记得点赞👍+关注哦!小红♥走起来!!!😘😘😘