MySQL 的分库分表

    • 分库
      • 解决什么问题:
      • 如何做?
        • 水平分库
        • 垂直分库
    • 分表
      • 解决什么问题
        • 如何做
        • 水平分表
        • 垂直分表
      • 分库分表的问题(分库分表带来的问题)
        • 1. 数据不均衡
        • 2 跨库事务
        • 3 唯一键
        • 4. 跨库查询
        • 5. 热点问题

分库

  • 将一个数据库拆分成多个数据库

解决什么问题:

  • MySQL实例分配的磁盘有限,
    • 单库的存储容量有限。如果一个库存储的数据量超出单机磁盘或文件系统的承载上限(如 ext4 的单文件 2TB 限制),超过会写入失败(我没试过,你们可以试试)
  • 单 MySQL 连接上限的问题(最大 1万多,一般最多设置 5-6k)
  • 其他
    • 性能严重下降(就像手机空间小了容易卡顿,可能是磁盘拿来当内存使(扩容);数据量大,加载的数量多,磁盘 io 增加,变慢)
    • 容易崩溃(卡死)
    • 备份与恢复漫长

如何做?

水平分库
  • 分摊数据量: 将数据库中的数据分摊到多个库
  • 具体做法: 对数据的 id(或者其他的字段)哈希取余,然后决定储存到那个数据库中
垂直分库
  • 将数据库根据业务进行拆分
  • 不同业务使用的表放到不同的数据库中
  • 比如(用户库存放用户信息,商品库,订单库)他们对应不同的功能.
  • 这样 1 可以分摊请求压力,2 可以做隔离

分表

解决什么问题

  1. 查询性能低(主要是全表扫描)
  2. 写入性能低(b+树的平衡机制)

1000 万与两亿数据读写对比

  • 全表扫描查询一条数据
    • 1000 万耗时 2s;
    • 两亿:耗时 40s
  • 写 10 万条数据耗时
    • 1000 万 2-3 秒
    • 两亿: 20-30 秒

一个查询执行太久会导致有大量的连接被占用,达到连接上限就会报错.

如何做
水平分表
  • 让一个数据表的数据行数变少,查询时间变快
  • 具体做法: 对数据的 id(或者其他的字段)哈希取余,然后决定储存到那个数据表中
垂直分表
  • 让每行数据所占空间变少,减少 io 的次数(MySQL 一次 io16k)
  • 根据不同字段的功能特点进行分表
  • 比如: 用户表有 50 个字段,可以根据信息的特点分成基本信息与拓展信息
  • 这样可以减少查询的磁盘 io 次数,降低查询耗时.

分库分表的问题(分库分表带来的问题)

1. 数据不均衡
  • 比如两个数据库,取余大部分数据(80%)都是一个数据库中的怎么办?
2 跨库事务

分库后,数据可能分布在不同的库中。例如:

一个订单系统,订单信息和用户信息被拆分到不同的库。如果需要在一个事务中同时更新订单状态和用户余额,就涉及跨库事务。

3 唯一键

对表/库进行水平拆分后就无法保持强唯一约束了

  • 解决方案
  1. UUID:

使用 UUID 生成唯一标识。
优点:保证全局唯一;缺点:UUID 长度大,索引性能较差。

  1. 雪花算法:

基于时间戳生成全局唯一 ID(如 Twitter 的 Snowflake 算法)。
优点:高效,生成的 ID 有序;缺点:依赖外部服务。

  1. 数据库自增步长:

设置每个库的自增 ID 起始值和步长。例如:
库1:1, 3, 5…
库2:2, 4, 6…
优点:实现简单;缺点:不适用于动态扩容。

4. 跨库查询

问题
分库后,复杂查询(如多表 JOIN 或聚合操作)变得困难。例如:

查询某用户的所有订单和支付记录,但订单和支付信息在不同库中。

5. 热点问题

分库分表可能导致数据访问集中于某些分片。例如:

用户按 ID 分片,但某些大客户的操作频繁集中到一个库,造成热点

参考:
https://cloud.tencent.com/developer/article/1901963
https://www.cnblogs.com/chengxy-nds/p/16924305.html
https://cloud.tencent.com/developer/article/1843987

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497636.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《计算机组成及汇编语言原理》阅读笔记:p128-p132

《计算机组成及汇编语言原理》学习第 10 天,p128-p132 总结,总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑,寄存器是16位,数据总线(data bus)是8位,地址总线是20位。 (1)g…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据,nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的,再来做一篇总结篇,也分享下练习数据跟工具,如果还是弄不了的&#xff0…

安装了python,环境变量也设置了,但是输入python不报错也没反应是为什么?window的锅!

目录 问题 结论总结 衍生问题 1 第1步:小白python安装,不要埋头一直点下一步!!! 2 第2步:可以选择删了之前的,重新安装python 3 第3步:如果你不想或不能删了重装python&#…

图像处理-Ch7-快速小波变换和小波包

个人博客!无广告观看,因为这节内容太多了,有点放不下,分了三节 文章目录 快速小波变换(The Fast Wavelet Transform)与两频段子带编译码系统的关系例:计算一维小波变换 一维快速小波反变换例:计算一维小波…

【从零开始】11. LLaMA-Factory 微调 Qwen 模型(番外篇)

书接上回,在完成了 RAGChecker 测试后,离 RAG 应用真正发布还差最后一步 - 基础信息指令微调。考虑到模型还是需要具备一定程度的“自我认知”,因此需要将公司信息“嵌入”到模型里面的。为此,我选择了 LLaMA-Factory(…

小程序配置文件 —— 15 页面配置

页面配置 小程序的页面配置,也称为局部配置,每一个小程序页面也可以使用自己的 .json 文件来对页面的窗口表现进行配置; 需要注意的是:页面配置文件的属性和全局配置文件中的 window 属性几乎一致,只不过这里不需要额…

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式

任何网络协议,都必须要用包头里面设置写特殊字段来标识自己,传输越复杂,越稳定,越高性能的协议,包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…

OneNet平台2024版MQTT协议完整开发案例教程【MQTT数据流模式】

一、前言 此篇文章是以智慧路灯项目为例,完整的演示介绍 OneNet平台的开发。 OneNet平台 是2024年的新版本,采用数据流模版为例。 方便大家,腾讯云IOT 转 OneNet平台。 因为目前腾讯云IOT平台无法白嫖了,新用户已经无法免费使用…

一起学Git【第六节:查看版本差异】

git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…

【小程序】wxss与rpx单位以及全局样式和局部样式

目录 WXSS 1. 什么是 WXSS 2. WXSS 和 CSS 的关系 rpx 1. 什么是 rpx 尺寸单位 2. rpx 的实现原理 3. rpx 与 px 之间的单位换算* 样式导入 1. 什么是样式导入 2. import 的语法格式 全局样式和局部样式 1. 全局样式 2. 局部样式 WXSS 1. 什么是 WXSS WXSS (We…

uniapp-vue3(下)

关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…

大数据技术-Hadoop(一)Hadoop集群的安装与配置

目录 一、准备工作 1、安装jdk(每个节点都执行) 2、修改主机配置 (每个节点都执行) 3、配置ssh无密登录 (每个节点都执行) 二、安装Hadoop(每个节点都执行) 三、集群启动配置&a…

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机(Windows) 要使用的话需要固定ip,不然ip会换来换去,固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下,其他一路点安装完成后会打开Sunshine的Web UI&#xff…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法,和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链,及利用思路 (一)_IO_2_1_std…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pyth…

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况,一般网页和桌面是可以正常编译的, 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…

yolov4算法及其改进

yolov4算法及其改进 1、yolov4介绍2、mosaic与mish激活函数2.1、mosaic数据增强2.2、Mish激活函数 3、backbone网络框架的改进4、PAN-FPN的介绍5、样本匹配和损失函数5.1、样本匹配5.2、YOLOV4损失函数5.2.1、GIOU loss5.2.2、DIOU loss5.2.3、CIOU Loss 1、yolov4介绍 改进点&…

Edge如何获得纯净的启动界面

启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…