老大让我优化数据库,我上来就分库分表,他过来就是一jio。。。
来自:CSDN,作者:_陈哈哈
链接:https://blog.csdn.net/qq_39390545/article/details/116248222
一、朴实无华的 - 分表
1、垂直分表
2、水平分表
二、花里胡哨的 - 分库
3、垂直分库
4、水平分库
总结
首先我们要知道分库、分表都是干啥的,本文主角还是我们的MySQL为第一视角。首先从字面意思来看:
分库:由单个数据库实例拆分成多个数据库实例,将数据分布到多个数据库实例中。
分表:由单张表拆分成多张表,将数据划分到多张表内。
要知道,对于大型互联网项目,数据量级可能不是我们能想到的,每日新增数据量过千万是常有的事儿,想靠单台MySQL服务器是不现实的。你项羽在牛B,也顶不住四个队友挂机啊!!项羽:???
随着业务数据量和网站QPS日益增高,对数据库压力也越来越大,单机版数据库很快会到达存储和并发瓶颈,就需要做数据库性能方面的优化,分库分表采取的是分而治之的策略,分库目的是减轻单台MySQL实例存储压力及可扩展性,而分表是解决单张表数据过大以后查询的瓶颈问题,坦白说,这些问题也是所有关系型数据库的“硬伤”
。
今天我们就基于常见分库、分表的策略方式以及场景,来搞清楚我们到底啥时候用的到
。常用策略包括:垂直分表
、水平分表
、垂直分库
、水平分库
。
一、朴实无华的 - 分表
1、垂直分表
垂直分表,或者叫竖着切表
,是不是感受到该策略是以字段为依据的!主要按照字段的活跃性、字段长度,将表中字段拆分到不同的表(主表和扩展表)中。
特点:
每个表的结构都不一样;
每个表的数据也不一样,
有一个关联字段,一般是主键或外键,用于关联
兄弟表
数据;所有兄弟表的并集是该表的全量数据;
场景 :
有几个字段属于热点字段,更新频率很高
,要把这些字段单独切到一张表里,不然innodb行锁很恶心的,锁死你呀~~如用户表里的余额字段?不,我的余额就很稳定,一直是0。。有大字段,如text
,存储压力很大,毕竟innodb数据和索引是同一个文件;同时,我又喜欢用SELECT *,你懂得,这磁盘IO消耗的,跟玩儿似的,谁都扛不住的。有明显的业务区分,或表结构设计时字段冗余;
有些小伙伴看到第一点时,就发现陈哈哈是个菜鸡,用户表怎么会有余额字段?明显有问题啊!赶紧先到评论区喷陈哈哈一波~~然后笑嘻嘻的发现原来是个小尾巴,真不要脸是吧。。是的,因此不同业务我们要把具体字段拆开,这样才有利于业务后续扩展哦。
2、水平分表
水平分表,也叫“横着切”。。以行数据为依据进行切分,一般按照某列的自容进行切分。
如手机号表,我们可以通过前两位或前三位进行切分,如131、132、133 → phone_131、phone_132、phone_133
,手机号有11位(100亿),量大是很正常的事儿,这年头谁家老头老太太每个手机呢是吧。这样切就把一张大表切成了好几十张小表,数据量不就下来了。有同学就问了那我怎么知道我这手机号查哪个表呢?一看你就没认真看前两行标红的点,为啥标红嘞?比如我查131
00001111,那我截取前三位,动态拼接到查询的表名上,就行了。
特点:
每个表的结构都一样;
每个表的数据都不一样,没有交集;
所有表的并集是该表的全量数据;
场景 :单表的数据量过大或增长速度很快,已经影响或即将会影响SQL查询效率,加重了CPU负担,提前到达瓶颈。记得水平分表越早越好,别问我为什么。。
二、花里胡哨的 - 分库
需要你注意的是,传统的分库和我们熟悉的集群、主从复制可不是一个事儿
;多节点集群是将一个库复制成N个库,从而通过读写分离实现多个MySQL服务的负载均衡,实际是围绕一个库来搞的,这个库称为Master主库。而分库就不同了,分库是将这个主库一分为N,比如一分为二,然后针对这两个主库,再配置2N个从库节点。
3、垂直分库
纵向切库,太经典的切分方式,基于表进行切分,通常是把新的业务模块或集成公共模块拆分出去,比如我们最熟悉的单点登录、鉴权模块。熟悉的味道,记得有一次我把一些没用的表切到一个性能很好的服务器中,这服务器我专门用来学习,后来也不知被哪个狗腿子告密了~ 我**你个**,有种站出来,你个**东西
老大让我优化数据库,我上来就分库分表,他过来就是一jio。。。相关推荐
- 数据库之互联网常用分库分表方案
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- 数据库主从复制,读写分离,分库分表理解 (数据库架构演变)
主从复制 主从复制, 主要是针对MySQL数据库的高可用性, 容灾性上面. 是叫做高可用性? 高可用性可以简单的理解为容灾性, 稳定性, 针对故障,风险情况下的处理, 备案, 策略. 指系 ...
- 高性能数据库集群:分库分表
读写分离分散了数据库读写操作的压力,但没有分散存储压力,当数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力会成为系统的瓶颈,主要体现在这几个方面: 数据量太大,读写的性能会下降,即使有索引, ...
- 数据库读写分离与分库分表
3.1 读写分离(主要是为了数据库读能力的水平扩展) 3.1.1 读写分离概念 单台mysql实例情况下不能支持短时间内大量的对数据库的读操作,所以会将数据库配置成集群,一个master(主库).多个 ...
- Mysql数据库数据拆分之分库分表总结
Mysql数据库分库和分表方式,涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 分库 场景: 分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法 ...
- mybatis+shardingJdbc实现数据库读写分离和分库分表
文章目录 一.原理介绍 二.环境准备 2.1 数据库环境 2.2 开发环境 2.2.1 pom.xml 2.2.2 建表语句 三.主要代码 3.1 实体 3.2 Mapper 3.3 Controll ...
- 主从复制MySQL的安装和用数据库中间件MyCat实现分库分表、读写分离
1.MySql主从复制 1.1.安装mysql 1.1.1.下载 下载地址:https://dev.mysql.com/downloads/mysql/ 1.1.2.卸载预装mysql #查看已安装: ...
- 数据库性能优化—分库分表
文章出自:阿里巴巴十亿级并发系统设计(2021版) 链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA 提取码:8888 目录 如何对数据库做垂直拆分 ...
- 数据库分库分表解决方案汇总
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | butterfly100 来源 | cnblo ...
- 数据库分库分表、读写分离的原理和实现,以及使用场景
2019独角兽企业重金招聘Python工程师标准>>> 为什么要分库分表和读写分离? 类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,日益增长的业务数据,无疑对数 ...
最新文章
- 作为“山寨版脸书”Reels在网站推广中真的要和Tik Tok死磕?
- 【转载】【VSCode】Windows下VSCode编译调试c/c++
- Hadoop的mapper输出中key和value之间的分隔符
- java.net.SocketException四大异常解决方案---转
- container 的背后
- 报错,null [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException,Failed to con
- 转→js数组遍历 千万不要使用for...in...
- [转载] python 从右到左字符串替换方法实现
- m126a linux驱动下载,惠普HP LaserJet Pro M126a MFP 驱动
- 阐述游戏关卡设计中的色彩理论
- Wireshark基础知识(一)
- Catch the moments of your life. Catch them while you're young and quick.
- 做“合规”的数据处理者 | 一文图解《网络数据安全管理条例》
- 华为OD 社招(Java后端)一面
- 部分选主元的Doolittle分解
- Podman使用详解
- 百度携手重庆渝中区,打造区块链大数据智能化应用示范城区
- Android权限——中英文对照表
- 徽州臭鳜鱼渐成“网红年货”
- SEO(搜索引擎优化)是不是任何行业、产品都适合做SEO?
热门文章
- deepfakes怎么用_如何使用 Deepfakes 换脸
- 应用随机过程张波商豪_Markov链的应用一:MCMC算法
- 什么是以太坊?它到底怎么运作的?
- 如何理解Memory leak
- 五大颠覆性特征带你认识6G网络
- oracle连接查询详解
- mysql数据库名虚拟机_linux虚拟机上装mysql数据库
- Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)
- delphi dbgrid 上下移动并获取选中值_如何在UE4移动端中实现HZB?
- 欧拉回路与欧拉路(模板)