当前位置: 首页 > news >正文

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

这里写目录标题

  • 1. 拆分策略
    • 1.1 垂直拆分
      • 1.1.1 垂直分库(以表为依据,根据业务将不同表拆分到不同库中)
      • 1.1.2 垂直分表(以字段为依据,根据字段属性将不同字段拆分到不同表中)
    • 1.2 水平拆分
      • 1.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 垂直拆分

1.1.1 垂直分库(以表为依据,根据业务将不同表拆分到不同库中)

每个库的表结构都不一样。
每个库的数据也不一样。
所有库的并集是全量数据。

1.1.2 垂直分表(以字段为依据,根据字段属性将不同字段拆分到不同表中)

每个表的结构都不一样。
每个表的数据也不一样,一般通过一列(主键/外键)关联。
所有表的并集是全量数据。

1.2 水平拆分

1.1.1 水平分库(以字段为依据,按照一定策略,将一个库的数据拆分到多个库中)

每个库的表结构都一样。
每个库的数据都不一样。
所有库的并集是全量数据。

1.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

相关文章:

  • 中秋节——嫦娥奔月
  • 文件的上传下载
  • 数学建模学习(101):车辆路线规划问题
  • 为Ubuntu网页设置稳定的数据隧道
  • 通宵三天 我做了一个超级好玩的中秋节小游戏
  • 都这麽大了还不快了解防火墙?
  • 【名词从句】名词从句的虚拟语气、主语从句、引导名词从句
  • SpringBoot中“@SpringBootApplication“自动配置原理《第七课》
  • MySQL-3-多表查询和事务(结合案例学习)
  • Go语言 和 Java语言对比理解系列一:函数参数传递
  • Transformer模型学习笔记
  • 14.Vue3过渡和动画实现
  • SCS【7】单细胞转录组之轨迹分析 (Monocle 3) 聚类、分类和计数细胞
  • EMQX Cloud全托管的 MQTT 消息云服务
  • 【软考 系统架构设计师】操作系统① 操作系统概述
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 2017 前端面试准备 - 收藏集 - 掘金
  • angular学习第一篇-----环境搭建
  • canvas绘制圆角头像
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • interface和setter,getter
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Laravel 中的一个后期静态绑定
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • maven工程打包jar以及java jar命令的classpath使用
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Webpack 4x 之路 ( 四 )
  • windows下使用nginx调试简介
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链分支循环
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 十年未变!安全,谁之责?(下)
  • 线上 python http server profile 实践
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • !!Dom4j 学习笔记
  • # Java NIO(一)FileChannel
  • # 数据结构
  • #QT(串口助手-界面)
  • $.ajax()参数及用法
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (python)数据结构---字典
  • (九)One-Wire总线-DS18B20
  • (七)Knockout 创建自定义绑定
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 服务 ServiceController
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net分布式压力测试工具(Beetle.DT)
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [2669]2-2 Time类的定义