房地产最新消息今日/网站及搜索引擎优化建议
今天我们来学习MYSQL的分库分表
面对访问数据库海量数据的情况,这张图带你解决数据库压力问题
1、为什么要进行分库分表???
分库分表是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据性能的目的。
2、什么是分库分表???
3、分表的优点???
4、如何分库???
垂直分库:
按照业务将表进行分类,分不到不同的数据库上面,每个库可以放在不同的服务器上,在分布式系统中实现专库专用。
案例:将商品信息表和商品描述表放在商品库,店铺表放在店铺库。
水平分库:由于单库数据量太大,按照一定规则分成和库中表字段的类型一致的不同库中,每个库放在不同服务器上,减轻磁盘、cpu、内存的压力。
案例:将商品表分成两个字段类型一样的商品表,分到两个不同的服务器数据库中。
垂直分库和水平分库的区别:
垂直分库:把不同表分到不同的数据库中(商品表和店铺表)
水平分库:把不同数据分到不同数据库中(商品表分成两个类型一样的表分到不同数据库中)
5、如何分表???
垂直分表:
将一张海量数据的表按照使用频次垂直切分,例如:用户表中多个字段,用户信息、用户学习、用户工作,将按照他们的使用频次垂直切分到不同的表中,减少单表的访问压力。
案例:将商品信息表按照访问频率分为两个表,商品信息和商品描述表
水平分表:
在同一个数据库内,把同一个表的数据按照业务属性、时间、取键、Hash、数据量进行切分到多个表中。
案例: 将同一个库中的商品表的数据分成两个商品表中,可以在一个或多个库中
垂直分表和水平分表的区别:
垂直分表: 将一个表按照字段访问的频次分到多个表中,可以是一个或多个数据库(分的是字段)
水平分表: 将一个表按照数据分到多个表中,可以是一个或多个数据库(分的是数据)
6、水平分表面临的困难及开源产品
数据库代理方式访问:
非代理方式访问:SQL语句直接访问数据库服务器,比代理方式访问快。
MYSQL Fabric官方产品对于分表还是比较实用的。
水平分表的实现虽然难以实现,但是对于自己特定项目的分库分表还是比较好实现的,对于通用的分库分表难以实现,下来就看怎么实现吧!!!
7、基本的实现思路:
1、解析路由(找对应数据源、表):根据业务功能、SQL解析等方式,找到要访问的数据源和表
2、执行相应表的功能(根据sql实现具体功能)
3、对查询结果集进行合并,二次处理。(合并查询结果集,执行子查询)
4、是否有事务(处理不同方式的事务)
8、实现的层面
推荐使用DAO层实现方式
9、小结
10、分库分表带来的问题
分库分表能有效的缓解单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接属的瓶颈,同时也带来了一些问题
1、事务一致性问题
分库分表把数据分布到不同的数据库服务器,不可避免带来分布式事务问题
2、跨节点关联查询
本来可以通过join连接查询的sql语句,现在得两次查询
第一次:查到关联数据的id。
第二次:根据id找到对应的数据。
3、跨节点分页、排序函数
合二为一
4、主键避重
全局主键解决主键重复问题
5、公共表
例如:地区表(商品表和店铺表的依赖公共表)
在每个数据库服务中都建立公共表,所有对公共表的更新操作都同时发送到所有分库执行。
小伙伴们,对于MYSQL数据库的分库分表理论就介绍到这里了,下期我们用sharding-JDBC框架来实现吧!!!
get到的小伙伴记得点赞👍+关注哦!小红♥走起来!!!😘😘😘
复制代码