MySQL-如何分库分表?一看就懂

news2024/11/18 6:21:09

一、为什么要分库分表

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

二、什么是分库分表

分库分表方案是对关系型数据库数据存储和访问机制的一种补充。
分库:将一个库的数据拆分到多个相同的库中,访问的时候访问一个库
分表:把一个表的数据放到多个表中,操作对应的某个表就行

三、分库分表的几种方式

1.垂直拆分
(1) 数据库垂直拆分

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

(2)表垂直拆分

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

垂直拆分特点
1.每个库(表)的结构都不一样
2.每个库(表)的数据至少一列一样
3.每个库(表)的并集是全量数据

垂直拆分优缺点

优点:
1.拆分后业务清晰(专库专用按业务拆分)
2.数据维护简单,按业务不同,业务放到不同机器上

缺点:
1.如果单表的数据量,写读压力大
2.受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购)
3.部分业务无法关联join,只能通过java程序接口去调用,提高了开发复杂度

  1. 水平拆分
    (1) 数据库水平拆分

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

(2) 表水平拆分

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

水平拆分的其他方式

range来分,每个库一段连续的数据,这个一般是按比如时间范围来的,但是这种一般较少用,因为很容易产生热点问题,大量的流量都打在最新的数据上了,优点:扩容的时候,就很容易,因为你只要预备好,给每个月都准备一个库就可以了,到了一个新的月份的时候,自然而然,就会写新的库了 缺点:大部分的 请求,都是访问最新的数据。实际生产用range,要看场景,你的用户不是仅仅访问最新的数据,而是均匀的访问现在的数据以及历史的数据
hash分发,优点:可以平均分配每个库的数据量和请求压力 缺点:扩容起来比较麻烦,会有一个数据迁移的这么一个过程
水平拆分特点
1.每个库(表)的结构都一样
2.每个库(表)的数据都不一样
3.每个库(表)的并集是全量数据

水平拆分优缺点

优点:
1.单库/单表的数据保持在一定量(减少),有助于性能提高
2.提高了系统的稳定性和负载能力
3.拆分表的结构相同,程序改造较少。

缺点:
1.数据的扩容很有难度维护量大
2.拆分规则很难抽象出来
3.分片事务的一致性问题部分业务无法关联join,只能通过java程序接口去调用

四、分库分表带来的问题
分布式事务
跨库join查询
分布式全局唯一id
开发成本 对程序员要求高
五、分库分表技术如何选型
分库分表的开源框架
jdbc 直连层:shardingsphere、tddl
proxy 代理层:mycat,mysql-proxy(360)

jdbc直连层

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

proxy代理层

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

jdbc直连层和proxy代理层优缺点

jdbc直连层性能高,只支持java语言,支持跨数据库
proxy代理层开发成本低,支持跨语言,不支持跨数据库

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环境监测看板系统能轻松掌握周边环境的数据

在工业、医疗、养殖和生活等许多地方,温湿度是一个重要的测量参数。季节的变化对环境温湿度影响很大,不同的产品和场地对温湿度都有要求,温湿度环境会影响到产品的性能及寿命,加速产品的老化。以前传统的温湿度检测模式是以人为基…

Pyside2项目实战,从0开始写一个GUI可视化项目:总览

前言 最近使用 Pyside2 编写了几个GUI工具,发现效果出奇的好。遂产生了分享它的念头。 接下来如果不出意外,大概没有意外,我会开始写这个专栏,介绍从零开始去编写一个实用的GUI工具。 这是Pyside2第一篇:《总览》 本文…

数学建模学习笔记(18):三维图形的绘制

三维图形的绘制生成绘图所需的横纵坐标三维网格图的绘制基本语法实战案例两种变形函数三维曲面图的绘制两种变形函数绘图效果的优化其他补充内容生成绘图所需的横纵坐标 [X,Y]meshgrid(xgv,ygv) % 函数解释:X和Y是用于接收返回值的变量,是两个大小相等的…

Python的基础语法

字面量 字面量是在代码中,被写下来的固定的值,称之为字面量 常见的字面量类型 字符串又称为文本是由任意数量的字符如中文、英文、各类符号、数字组成。所以叫做字符串常量。 注释 注释 在程序代码中对程序代码进行解释说明的文字 作用 注释不是程…

Java中XML如何转为BEAN

在网络通讯中&#xff0c;对方传的数据经常是XML格式包装的数据集合。在Java开发中&#xff0c;我们如何将XML转成Java实体类呢&#xff1f; 对方发送的报文 <ns2:response xmlns:ns2"http://service.zxl.cn/test/xml"><school><location>长江边…

Pointnet Tutorial

目录 .1 intro-点云特性 1.1 点云特性 1.2 motivation 1.3 pointnet的处理 .2 Pointnet 2.1 contribution 2.2 solution 2.3 backbone 2.4 代码部分 2.5 小结 .4 应用 References .1 intro-点云特性 Q1&#xff1a;什么是点云&#xff1f; 简单来说就是一堆三维点的集…

【异常】前端提示 Support for the experimental syntax ‘jsx‘ isn‘t currently enabled

一、报错内容 17:33:41 - Building for production... 17:34:13 ERROR Failed to compile with 5 errors5:34:09 PM 17:34:13 17:34:13 error in ./src/layout/components/Sidebar/Item.vue?vue&typescript&langjs& 17:34:13 17:34:13 Syntax Error…

万应低代码1月重点更新内容速递

速览版 详情版 一、低代码开发能力提升 01 工作流 &#xff08;1&#xff09; 优化流程推演 在流程发起时&#xff0c;对流程各节点审批人、抄送人进行实时推演。 【使用场景】 ● 以“请假”场景为例&#xff0c;A 角色的固定审批人为“甲、乙、丙” 3 人&#xff0c;在某…

windows10操作系统 显卡MX150 安装CUDA+cuDNN+pytorch

本人水平有限&#xff0c;如有问题请多指正笔记本系统&#xff1a;Windows 10 64位显卡&#xff1a;NVIDIA GeForce MX150显卡驱动程序版本&#xff1a;512.78显卡驱动程序支持CUDA版本&#xff1a;11.6.134及以下安装CUDA&#xff1a;11.6.0安装cuDNN&#xff1a;8.7.0一、安装…

路由器刷机解决学校无线上网问题(小米4A千兆版)

一、准备工作 1、路由器正常联网状态&#xff0c;&#xff08;正常联网状态指的是电脑能够通过路由器上网&#xff09; 2、电脑网线插入路由lan口&#xff0c;IP地址设置为自动获取 3、启动window10的Telent功能 控制面板 -> 程序和功能 -> 左侧“启动或关闭Windows功能…

FormArray在动态表格中的应用

如下图&#xff0c;是这次想要实现的功能。 一个表格行&#xff0c;点击新增按钮就增加一行&#xff0c;点击后面的删除按钮就可以删除对应的行&#xff0c;其中有部分字段需要添加非空校验。要想实现这个功能&#xff0c;需要应用到FormArray的知识。 步骤: 1. 声明一个Form…

打开IE浏览器自动跳转到Edge的解决方法

场景Windows 10中&#xff0c;打开IE浏览器自动跳转到Edge&#xff0c;但是某些网站还是只能在IE中正常访问&#xff0c;Edge访问会出问题。解决方案Edge中点击右上角的三个点&#xff0c;然后点击设置在“默认浏览器”中&#xff0c;修改“让 Internet Explorer 在 Microsoft …

Linux-文件和目录常用命令

1.查看目录内容1.1 终端使用技巧自动补全在敲出 文件/目录/命令的前几个字母之后&#xff0c;按下tab键如果输入的没有歧义&#xff0c;系统会自动补全如果还存在其他文件/目录/命令,再按一下tab键,系统会提示可能存在的命令曾经使用过的命令按上/下光标键可以再曾经使用过的命…

GeoServer系列-安装SqlServer插件

GeoServer 安装包中是不含sqlserver插件的&#xff0c;所以无法创建sqlserver的数据存储&#xff0c;要想支持发布sqlserver的空间表到geoserver就需要添加插件 1&#xff0c;下载插件 官网下载地址&#xff1a;https://geoserver.org/download/ 根据自己的版本下载指定的插件…

Java之并发编程(三)

五、Java 常见并发容器总结 1.ConcurrentHashMap ConcurrentHashMap : 线程安全的 HashMap 1.1 Collections.synchronizedMap() 并发时使用它方法包装HashMap同步&#xff0c;这属于全局锁&#xff0c;性能低下。 1.2 ConcurrentHashMap&#xff0c; 读写操作都能保证很高…

文献阅读-Deep multi-view learning methods: A review

文献阅读-Deep multi-view learning methods: A reviewAbstract1-Introduction1.1 Comparison with Previous Reviews2 Multi-view Learning Methods in The Deep Learning Scope2.1 Multi-view convolutional neural network2.2. Multi-view auto-encoder2.3. Multi-view gene…

杉数求解器

目录前言一、简介以及安装二、COPT交互式命令行工具2-1、普通工具命令2-2、COPT工具命令三、使用示例3-1、交互模式3-2、Windows下终端窗口直接加载四、Python接口4-1、安装4-2、案例分析五、COPT调优工具5-1、介绍5-2、调优工具相关参数六、Python API参考6-1、COPT常数类总结…

【Jetson安装Nomachine】

0. 介绍 Nomachine是一款免费的远程桌面访问应用程序。支持用户从任何地方访问连接到Internet的计算机。该应用程序允许多个用户访问单个PC&#xff0c;且支持使用不同的操作系统。 官网链接&#xff1a;NoMachine - Free Remote Desktop for Everybody 1. 下载Nomachine 软…

【C++】简单理解内联函数

内联函数1.内联函数的概念2.C为什么要有内联函数&#xff1f;3.内联函数展示3.1查看方式3.2 观察汇编代码4.使用内联函数的注意事项5.内联函数缺点和优点1.内联函数的概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有…

九龙证券|沪指收获2010年以来最强1月 北向资金净买入额刷新历史纪录

昨日&#xff0c;A股小幅调整&#xff0c;2023年1月行情随之收官。全体来看&#xff0c;1月A股商场拾级而上&#xff0c;盘面出现普涨格局&#xff0c;价值与生长风格均有亮眼体现。三大股指中&#xff0c;上证指数1月上涨5.39%&#xff0c;创2010年以来最佳局面。深证成指、创…