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

MySQL分库分表的方式有哪些

目录

一、为什么要分库分表

二、什么是分库分表

三、分库分表的几种方式

1.垂直拆分

2. 水平拆分

四、分库分表带来的问题

五、分库分表技术如何选型


一、为什么要分库分表

如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,tps十几万并发量,如果传统的架构(一主多从),主库容量肯定无法满足这么高的tps,业务越来越大,单表数据超出了数据库支持的容量,持久化磁盘io,传统的数据库性能瓶颈,产品经理业务·必须做,改变程序,数据库刀子切分优化。由于数据库连接数不足并且表中的数据量庞大,即使进行了优化,查询性能仍然较低,因此需要进行分割。

二、什么是分库分表

  • 分库分表方案是对关系型数据库数据存储和访问机制的一种补充。

  • 分库:将一个库的数据拆分到多个相同的库中,访问的时候访问一个库

  • 分表:把一个表的数据放到多个表中,操作对应的某个表就行

三、分库分表的几种方式

MySQL分库分表的方式有哪些

1.垂直拆分

(1) 数据库垂直拆分

MySQL分库分表的方式有哪些

根据业务拆分,如图,电商系统,拆分成订单库,会员库,商品库

(2)表垂直拆分

MySQL分库分表的方式有哪些

根据业务去拆分表,如图,把user表拆分成user_base表和user_info表,use_base负责存储登录,user_info负责存储基本用户信息

垂直拆分特点:

  • 每个库(表)的结构都不一样

  • 每个库(表)的数据至少一列一样

  • 每个库(表)的并集是全量数据

垂直拆分优缺点

优点:

  • 拆分后业务清晰(专库专用按业务拆分)

  • 数据维护简单,按业务不同,业务放到不同机器上

缺点:

  • 如果单表的数据量,写读压力大

  • 受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购)

  • 部分业务无法关联join,只能通过java程序接口去调用,提高了开发复杂度

2. 水平拆分

(1) 数据库水平拆分

MySQL分库分表的方式有哪些

如图,按会员库拆分,拆分成会员1库,会员2库,以userId拆分,userId尾号0-5为1库 6-9为2库,还有其他方式,进行取模,偶数放到1库,奇数放到2库

(2) 表水平拆分

MySQL分库分表的方式有哪些

如图把users表拆分成users1表和users2表,以userId拆分,进行取模,偶数放到users1表,奇数放到users2表

水平拆分的其他方式:

  • range来分,每个库一段连续的数据,这个一般是按比如时间范围来的,但是这种一般较少用,因为很容易产生热点问题,大量的流量都打在最新的数据上了,优点:扩容的时候,就很容易,因为你只要预备好,给每个月都准备一个库就可以了,到了一个新的月份的时候,自然而然,就会写新的库了 缺点:大部分的 请求,都是访问最新的数据。实际生产用range,要看场景,你的用户不是仅仅访问最新的数据,而是均匀的访问现在的数据以及历史的数据

  • hash分发,优点:可以平均分配每个库的数据量和请求压力 缺点:扩容起来比较麻烦,会有一个数据迁移的这么一个过程

(3) 水平拆分特点

  • 每个库(表)的结构都一样

  • 每个库(表)的数据都不一样

  • 每个库(表)的并集是全量数据

(4) 水平拆分优缺点

优点:

  • 单库/单表的数据保持在一定量(减少),有助于性能提高

  • 提高了系统的稳定性和负载能力

  • 拆分表的结构相同,程序改造较少。

缺点:

  • 数据的扩容很有难度维护量大

  • 拆分规则很难抽象出来

  • 分片事务的一致性问题部分业务无法关联join,只能通过java程序接口去调用

四、分库分表带来的问题

  • 分布式事务

  • 跨库join查询

  • 分布式全局唯一id

  • 开发成本 对程序员要求高

五、分库分表技术如何选型

(1) 分库分表的开源框架

  • jdbc 直连层:shardingsphere、tddl

  • proxy 代理层:mycat,mysql-proxy(360)

jdbc直连层

MySQL分库分表的方式有哪些

jdbc直连层又叫jdbc应用层,是因为所有分片规则,所有分片逻辑,包括处理分布式事务 所有这些问题它都是在应用层,所有项目都是由war包构成的,所有分片都写成了jar包,放到了war包里面,java需要虚拟机去运行的,虚拟机运行的时候就会把war包里面的字节文件进行classLoder加载到jvm内存中,所有分片逻辑都是基于内存方进行操作的

(2) proxy代理层

MySQL分库分表的方式有哪些

如图,proxy代理层,所有分片规则,所有分片逻辑,包括处理分布式事务都在mycat写好了,所有分片逻辑都是基于mycat方进行操作

(3) jdbc直连层和proxy代理层优缺点

  • jdbc直连层性能高,只支持java语言,支持跨数据库

  • proxy代理层开发成本低,支持跨语言,不支持跨数据库

相关文章:

MySQL分库分表的方式有哪些

目录 一、为什么要分库分表 二、什么是分库分表 三、分库分表的几种方式 1.垂直拆分 2. 水平拆分 四、分库分表带来的问题 五、分库分表技术如何选型 一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而…...

数据结构课程设计选做(一)---数字排序(哈希、排序)

2.1.1 题目内容 2.1.1-A [问题描述] 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 2.1.1-B [基本要求] (1)输入格式: 输入的第一行包含一个整数n,表示给定数字的个数。 第二…...

Linux第90步_异步通知实验

“异步通知”的核心就是信号&#xff0c;由“驱动设备”主动报告给“应用程序”的。 1、添加“EXTI3.c” #include "EXTI3.h" #include <linux/gpio.h> //使能gpio_request(),gpio_free(),gpio_direction_input(), //使能gpio_direction_output(),gpio_get_v…...

elasticdump之python脚本

参考文章目录 elasticdump之shell备份脚本 前言 在企业实际生产环境中,避免不了要对es集群进行迁移、数据备份与恢复&#xff0c;以此来确保数据的可用性及完整性。因此&#xff0c;就涉及到了数据备份与恢复。本章主要以elasticdumppython为主&#xff0c;实现es集群索引备…...

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…...

js的常用方法

js的常用方法已经使用过的实例 JavaScript有许多基本方法&#xff0c;这些方法可用于执行各种操作&#xff0c;包括字符串操作、数组操作、数学运算等。以下是一些常用的JavaScript基本方法及简单示例&#xff1a; 一、字符串方法 1、toUpperCase()&#xff1a;将字符串转换为…...

基于SpringBoot实现的在线拍卖系统

系统开发环境 编程语言&#xff1a;Java数据库&#xff1a;MySQL容器&#xff1a;Tomcat工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统实现 管理员功能模块 首页 修改密码 用户管理 商品类型管理 拍卖商品 竞拍公告 轮播图 历史竞拍管理 竞拍订单管理 留言板管理 用户…...

React 组件生命周期对比:Class vs. 函数式

在 React 中&#xff0c;Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比&#xff0c;详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点&#xff0c;以及如…...

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…...

Vue2(十五):replace属性、编程式路由导航、缓存路由组件、路由组件独有钩子、路由守卫、history与hash

一、router-link的replace属性 1、作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2、浏览器的历史记录有两种写入方式&#xff1a;分别为push和replace&#xff0c;push是追加历史记录&#xff0c;replace是替换当前记录。路由跳转时候默认为push 3、如何开启repla…...

智慧污水井物联网远程监控案例

智慧污水井物联网远程监控案例 在当今数字化转型的浪潮中&#xff0c;智慧水务已成为城市基础设施建设的重要组成部分。其中&#xff0c;基于物联网技术的智慧污水井远程监控系统以其高效、精准、实时的特性&#xff0c;在提升污水处理效能、保障城市水环境安全、实现精细化管…...

程序员Java.vue,python前端后端爬虫开发资源分享

bat面试资料 bat面试题汇总 提取码&#xff1a;724z 更多资料...

PCL:基于法线微分分割

1.介绍 在三维点云处理中,法线微分分割(Difference of Normals,简称DoN)是一种常用的分割方法,用于将点云中的物体或者场景进行分割成不同的部分或者簇。通过计算点云中每个点的法线向量,以及法线向量的变化率(差异),可以有效地分割出具有明显形状差异的部分,从而实现…...

生产事故:线程管理不善诱发P0故障

背景 处于业务诉求&#xff0c;需要建立一个统一的调度平台&#xff0c;最终是基于 Dolphinscheduler 的 V1.3.6 版本去做二次开发。在平台调研建立时&#xff0c;这个版本是最新的版本 命运之轮开始转动 事故 表象 上班后业务部门反馈工作流阻塞&#xff0c;登录系统发现大…...

WPF —— GDI画板

定义绘制对象 Graphics g; 起始点坐标 Point start; 画笔颜色 Color c1 Color.Black; 是否开始绘制 当flagtrue开始绘制&#xff0c;结束绘 private void Form1_MouseDown(object sender, MouseEventArgs e) {if (e.Button MouseButtons.Left) //点击了鼠标左键{start …...

C++:基于范围的for循环

使用迭代器遍历容器在遍历的过程中需要给出容器的两端&#xff1a;开头&#xff08;begin&#xff09;和结尾&#xff08;end&#xff09;&#xff0c;因为这种遍历方式不是基于范围来设计的。在基于范围的for循环中&#xff0c;不需要再传递容器的两端&#xff0c;循环会自动以…...

引领智能互联时代,紫光展锐赋能百业创新发展

随着5G技术的快速发展&#xff0c;各行各业对通信技术的需求也在不断升级。紫光展锐持续深耕5G垂直行业&#xff0c;不断推进5G标准演进&#xff0c;从R15到R16&#xff0c;再到R17&#xff0c;展锐携手生态合作伙伴&#xff0c;不断推出创新性解决方案&#xff0c;在5G RedCap…...

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI&#xff0c;所以需要编译lv_micropython&#xff0c;当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下&#xff0c;但是我的电脑是windows系统&#xff0c;所以我在windows系统上安装了VMware虚拟机&…...

二叉树练习day.9

669.修剪二叉搜索树 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变…...

2024年第十七届“认证杯”数学中国数学建模网络挑战赛B题思路

B题 神经外科手术的定位与导航 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要将颅骨打开一个(或几个)圆形窗口,将病变部位暴露在术野中。但当病变部位较深时,就必…...

StructBERT模型本地部署详解:从GitHub克隆到服务启动

StructBERT模型本地部署详解&#xff1a;从GitHub克隆到服务启动 你是不是也遇到过这样的场景&#xff1f;手头有一堆文本&#xff0c;需要快速判断它们之间的相似度&#xff0c;比如检查文章是否重复、匹配用户查询、或者做智能问答。如果每次都调用云端API&#xff0c;不仅费…...

AR.js测试自动化终极指南:使用WebDriverIO进行高效AR应用功能测试

AR.js测试自动化终极指南&#xff1a;使用WebDriverIO进行高效AR应用功能测试 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js AR.js是一个强大的Web增强现实库&…...

Janus-1.3B:1.3B参数解锁多模态理解生成新可能

Janus-1.3B&#xff1a;1.3B参数解锁多模态理解生成新可能 【免费下载链接】Janus-1.3B Janus-1.3B&#xff1a;新一代统一多模态模型&#xff0c;独特的自回归框架实现视觉编码解耦&#xff0c;提升多模态理解与生成的灵活性&#xff0c;性能超越传统模型。基于DeepSeek-LLM-1…...

OpenClaw技能组合:Qwen3.5-9B串联多个插件完成复杂数据分析

OpenClaw技能组合&#xff1a;Qwen3.5-9B串联多个插件完成复杂数据分析 1. 当数据分析遇上自动化&#xff1a;我的真实需求场景 上个月我需要定期分析某电商平台的竞品价格数据&#xff0c;传统做法是手动导出CSV→Excel处理→制作图表→写分析报告。重复三周后我意识到&…...

OpenClaw隐私保护:百川2-13B本地化部署下的数据全生命周期管理

OpenClaw隐私保护&#xff1a;百川2-13B本地化部署下的数据全生命周期管理 1. 为什么需要关注OpenClaw的隐私保护&#xff1f; 去年我在整理公司财报时&#xff0c;曾不小心把包含敏感数据的Excel表格上传到了公有云AI助手的聊天窗口。虽然及时删除了记录&#xff0c;但那种&…...

Cherry Studio集成火山方舟模型实战:从接入到性能调优全解析

最近在项目中尝试将火山方舟的模型集成到 Cherry Studio 里&#xff0c;整个过程踩了不少坑&#xff0c;也总结了一些经验。今天就来和大家分享一下从接入到性能调优的完整实战过程&#xff0c;希望能帮到有同样需求的开发者。 1. 背景与痛点&#xff1a;为什么集成过程让人头疼…...

4个步骤掌握FederatedScope:从入门到实践的联邦学习全流程指南

4个步骤掌握FederatedScope&#xff1a;从入门到实践的联邦学习全流程指南 【免费下载链接】FederatedScope An easy-to-use federated learning platform 项目地址: https://gitcode.com/gh_mirrors/fe/FederatedScope 联邦学习作为隐私计算领域的核心技术&#xff0c;…...

嵌入式NMEA-0183零内存分配解析器设计与实现

1. NMEA-0183 协议解析库深度技术解析&#xff1a;面向嵌入式系统的轻量级、零内存分配实现 NMEA-0183&#xff08;National Marine Electronics Association 0183&#xff09;是全球航海电子设备事实上的标准通信协议&#xff0c;自1983年发布以来&#xff0c;已广泛应用于GPS…...

接口测试,接口间数据传递,数组和字符串类型

一、接口传递说明接口1:输出如下接口2:输入如下&#xff1a;接口2的入参employeeId和userName需要从接口1的出参中获取二、解决方案ApiFox脚本&#xff1a;1、接口1后置操作&#xff1a;设置环境变量如下&#xff1a;var employeeList pm.response.json().data[0].employeeLis…...

2026江门LED柔性灯带模切线路板厂家权威推荐榜单来袭

在LED照明产业蓬勃发展的当下&#xff0c;LED柔性灯带模切线路板作为关键组件&#xff0c;其市场需求日益增长。江门作为重要的产业基地&#xff0c;拥有众多优秀的线路板厂家&#xff0c;盈声电子便是其中的佼佼者。盈声电子的技术实力盈声电子掌握着环保型无导线线路板&#…...