【面试题 - mysql】进阶篇 - 分库分表

这里写目录标题

  • 1. 分库分表
    • 1.1 分库
    • 1.2 分表
  • 2. MyCat
    • 2.1 概念介绍
    • 2.2 MyCat分片
      • 2.2.1 垂直拆分
      • 2.2.2 水平拆分 - 分片规则
        • 2.2.2.1 范围分片
        • 2.2.2.2 取模分片
        • 2.2.2.3 一致性hash分片
        • 2.2.2.4 枚举分片
        • 2.2.2.5 应用指定算法
        • 2.2.2.6 固定分片hash算法
        • 2.2.2.7 字符串hash解析算法
        • 2.2.2.8 按天分片算法
        • 2.2.2.9 自然月分片
  • 3. mycat 原理
    • 3.1 插入
    • 3.2 查询

1. 分库分表

1.1 分库

分库 就是将数据库中的数据分散到不同的数据库上。
垂直分库:
你将数据库中的用户表和用户订单表分别放在两个不同的数据库。
水平分库:
由于用户表数据量太大,你对用户表进行了水平切分,然后将切分后的 2 张用户表分别放在两个不同的数据库。

1.2 分表

分表 就是对单表的数据进行拆分。
垂直分表:
对数据表列的拆分,把一张列比较多的表拆分为多张表。
举个例子:我们可以将用户信息表中的一些列单独抽出来作为一个表。
水平分表:
简单来说,水平拆分是对数据表行的拆分,把一张行比较多的表拆分为多张表。
举个例子:我们可以将用户信息表拆分成多个用户信息表,这样就可以避免单一表数据量过大对性能造成影响。

2. MyCat

2.1 概念介绍

在MyCat的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。
【面试题 - mysql】进阶篇 - 分库分表_第1张图片

2.2 MyCat分片

2.2.1 垂直拆分

在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据存储及处理能力是有限的, 可以对数据库表进行拆分, 原有的数据库表如下。
【面试题 - mysql】进阶篇 - 分库分表_第2张图片
垂直拆分后:
【面试题 - mysql】进阶篇 - 分库分表_第3张图片
以上拆分方式,如果订单关联区域表查询会报错;
对于省、市、区/县表tb_areas_provinces , tb_areas_city , tb_areas_region,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设置为全局表,利于业务操作。最终拆分方式如图:
【面试题 - mysql】进阶篇 - 分库分表_第4张图片

2.2.2 水平拆分 - 分片规则

2.2.2.1 范围分片

根据指定的字段及其配置的范围与数据节点的对应情况, 来决定该数据属于哪一个分片。
【面试题 - mysql】进阶篇 - 分库分表_第5张图片

2.2.2.2 取模分片

根据指定的字段值与节点数量进行求模运算,根据运算结果, 来决定该数据属于哪一个分片。
【面试题 - mysql】进阶篇 - 分库分表_第6张图片

2.2.2.3 一致性hash分片

所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置,有效的解决了分布式数据的拓容问题。
【面试题 - mysql】进阶篇 - 分库分表_第7张图片

2.2.2.4 枚举分片

通过在配置文件中配置可能的枚举值, 指定数据分布到不同数据节点上, 本规则适用于按照省份、性别、状态拆分数据等业务 。
【面试题 - mysql】进阶篇 - 分库分表_第8张图片

2.2.2.5 应用指定算法

运行阶段由应用自主决定路由到那个分片 , 直接根据字符子串(必须是数字)计算分片号。
【面试题 - mysql】进阶篇 - 分库分表_第9张图片

2.2.2.6 固定分片hash算法

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与1111111111 进行位 & 运算,位与运算最小值为 0000000000,最大值为1111111111,转换为十进制,也就是位于0-1023之间。
【面试题 - mysql】进阶篇 - 分库分表_第10张图片
特点:
如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
可以均匀分配,也可以非均匀分配。
分片字段必须为数字类型。

2.2.2.7 字符串hash解析算法

截取字符串中的指定位置的子字符串, 进行hash算法, 算出分片。
【面试题 - mysql】进阶篇 - 分库分表_第11张图片

2.2.2.8 按天分片算法

【面试题 - mysql】进阶篇 - 分库分表_第12张图片

2.2.2.9 自然月分片

【面试题 - mysql】进阶篇 - 分库分表_第13张图片

3. mycat 原理

3.1 插入

【面试题 - mysql】进阶篇 - 分库分表_第14张图片

3.2 查询

【面试题 - mysql】进阶篇 - 分库分表_第15张图片

视频来源:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=188&spm_id_from=pageDriver&vd_source=b901ef0e9ed712b24882863596eab0ca

你可能感兴趣的:(面试题,-,mysql,mysql,数据库,java)