一文带你详解MYSQL数据库分库分表原理

今天咱们来学习MYSQL的分库分表sql

  • 面对访问数据库海量数据的状况,这张图带你解决数据库压力问题
  • 一、为何要进行分库分表???

分库分表是为了解决因为数据量过大而致使数据库性能下降的问题,将原来独立的数据库拆分红若干数据库组成,将数据大表拆分红若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提高数据性能的目的。 数据库

  • 二、什么是分库分表???
  • 三、分表的优势???

  • 四、如何分库???

垂直分库: 按照业务将表进行分类,分不到不一样的数据库上面,每一个库能够放在不一样的服务器上,在分布式系统中实现专库专用。

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

水平分库: 因为单库数据量太大,按照必定规则分红和库中表字段的类型一致的不一样库中,每一个库放在不一样服务器上,减轻磁盘、cpu、内存的压力。

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

垂直分库和水平分库的区别:

垂直分库:把不一样表分到不一样的数据库中(商品表和店铺表)网络

水平分库:把不一样数据分到不一样数据库中(商品表分红两个类型同样的表分到不一样数据库中)框架

  • 五、如何分表???
    • 垂直分表: 将一张海量数据的表按照使用频次垂直切分,例如:用户表中多个字段,用户信息、用户学习、用户工做,将按照他们的使用频次垂直切分到不一样的表中,减小单表的访问压力。

案例:将商品信息表按照访问频率分为两个表,商品信息和商品描述表 分布式

水平分表: 在同一个数据库内,把同一个表的数据按照业务属性、时间、取键、Hash、数据量进行切分到多个表中。

案例: 将同一个库中的商品表的数据分红两个商品表中,能够在一个或多个库中函数

垂直分表和水平分表的区别:性能

垂直分表: 将一个表按照字段访问的频次分到多个表中,能够是一个或多个数据库(分的是字段) 水平分表: 将一个表按照数据分到多个表中,能够是一个或多个数据库(分的是数据)学习

  • 六、水平分表面临的困难及开源产品

数据库代理方式访问:

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

MYSQL Fabric官方产品对于分表仍是比较实用的。
水平分表的实现虽然难以实现,可是对于本身特定项目的分库分表仍是比较好实现的,对于通用的分库分表难以实现,下来就看怎么实现吧!!!

  • 七、基本的实现思路:

一、解析路由(找对应数据源、表):根据业务功能、SQL解析等方式,找到要访问的数据源和表

二、执行相应表的功能(根据sql实现具体功能)

三、对查询结果集进行合并,二次处理。(合并查询结果集,执行子查询)

四、是否有事务(处理不一样方式的事务)

  • 八、实现的层面

推荐使用DAO层实现方式

  • 九、小结

  • 十、分库分表带来的问题

分库分表能有效的缓解单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、链接属的瓶颈,同时也带来了一些问题

一、事务一致性问题

分库分表把数据分布到不一样的数据库服务器,不可避免带来分布式事务问题

二、跨节点关联查询

原本能够经过join链接查询的sql语句,如今得两次查询

第一次:查到关联数据的id。

第二次:根据id找到对应的数据。

三、跨节点分页、排序函数

合二为一

四、主键避重

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

五、公共表

例如:地区表(商品表和店铺表的依赖公共表)

在每一个数据库服务中都创建公共表,全部对公共表的更新操做都同时发送到全部分库执行。


小伙伴们,对于MYSQL数据库的分库分表理论就介绍到这里了,下期咱们用sharding-JDBC框架来实现吧!!!

get到的小伙伴记得点赞👍+关注哦!小红♥走起来!!!😘😘😘
复制代码
相关文章
相关标签/搜索