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


    1. 分库分表

    1.1 分库

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

    1.2 分表

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

    2. MyCat

    2.1 概念介绍

    在MyCat的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。
    在这里插入图片描述

    2.2 MyCat分片

    2.2.1 垂直拆分

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

    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算法

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

    2.2.2.7 字符串hash解析算法

    截取字符串中的指定位置的子字符串, 进行hash算法, 算出分片。
    在这里插入图片描述

    2.2.2.8 按天分片算法

    在这里插入图片描述

    2.2.2.9 自然月分片

    在这里插入图片描述

    3. mycat 原理

    3.1 插入

    在这里插入图片描述

    3.2 查询

    在这里插入图片描述

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

  • 相关阅读:
    Pytorch 分布式训练(DP/DDP)
    20231012-黑马Vue学习笔记-第一天
    ThreadLocal线程局部变量
    力扣第41天----第123题、第188题
    使用python压缩文件夹
    Pulsar【部署 02】Pulsar可视化工具Manager安装使用
    【JVM技术专题】深入分析CG管理和原理查缺补漏「番外篇」
    Linux 基础入门(学习笔记通俗易懂版)
    Python开发者的宝典:CSV和JSON数据处理技巧大公开!
    c++day5---9.12
  • 原文地址:https://blog.csdn.net/yzx3105/article/details/126783935