您现在的位置是:首页 > 编程 > 

数据库如何实施垂直拆分,原理是啥???(第28讲)

2025-07-27 07:11:49
数据库如何实施垂直拆分,原理是啥???(第28讲) 《架构师之路:架构设计中的100个知识点》 28.数据库垂直拆分当数据库的数据量非常大时,水平切分和垂直拆分都降低数据量大小,提升数据库性能,有什么差别?水平切分是指,以某个字段为依据(例如uid),按照一定规则(例如取模),将一个库(表)上的数据拆分到多个库(表)上,以降低单库(表)大小,达到提升性能的目的的数据库架构设计方法。水平切分后,各个

数据库如何实施垂直拆分,原理是啥???(第28讲)

《架构师之路:架构设计中的100个知识点》 28.数据库垂直拆分

当数据库的数据量非常大时,水平切分和垂直拆分都降低数据量大小,提升数据库性能,有什么差别?

水平切分是指,以某个字段为依据(例如uid),按照一定规则(例如取模),将一个库(表)上的数据拆分到多个库(表)上,以降低单库(表)大小,达到提升性能的目的的数据库架构设计方法。

水平切分后,各个库(表)的特点是:

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

2. 每个库(表)的数据都不一样,没有交集;

. 所有库(表)的并集是全量数据;

垂直拆分是指,将一个属性较多,一行数据较大的表,将不同的属性拆分到不同的表中,以降低单库(表)大小,达到提升性能的数据库架构设计方法。

垂直切分后,各个库(表)的特点是:

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

2. 一般来说,每个库(表)的属性至少有一列交集,一般是主键

. 所有库(表)的并集是全量数据;

举个例子,用户表:

user( uid bigint, name varchar(16), pass varchar(16), age int, tinyint, flag tinyint, sign varchar(64), intro varchar(256) …);

垂直拆分之后,可能变成两个这样的表:

user_base( uid bigint, name varchar(16), pass varchar(16), age int, tinyint, flag tinyint, …); user_ext( uid bigint, sign varchar(64), intro varchar(256) …);

垂直切分的依据是什么?

当一个表属性很多时,垂直拆分依据主要有几点:

1. 将长度较短,访问频率较高的属性尽量放在一个表里,这个表暂且称为主表

2. 将字段较长,访问频率较低的属性尽量放在一个表里,这个表暂且称为扩展表

. 经常一起访问的属性,也可以放在一个表里;

为什么要这么这么拆分?

1. 数据库有自己的缓冲池buffer_pool,会将磁盘上的数据load到缓冲池里;

2. 缓冲池物理上以页page为单位,逻辑上以行row为单位,缓存数据;

. 在内存有限,缓冲池大小固定的情况下,长度较短的row,能缓存更多数据

4. 缓存高频的列column,能提升缓冲池命中率,减少磁盘IO;

举个例子:

1. 假设数据库内存buffer为1G,未拆分的user表1行数据大小为1k,那么只能缓存100w行数据

2. 如果垂直拆分成user_base和user_ext,其中user_base访问频率高,1行大小为0.1k,就能缓存1000w行数据

此时,访问磁盘的概率会大大降低,数据库访问的时延会大大降低,吞吐量会大大增加。

简单总结:

1. 海量数据高并发的数据库场景,垂直拆分能提升数据库性能;

2. 拆分核心依据是:将长度较短,访问频率较高的属性尽量放在主表里。

知其然,知其所以然。

思路比结论更重要。

补充阅读材料:

《数据库水平切分+垂直拆分简介》

文章很短,分钟搞定。

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2024-12-25,如有侵权请联系 cloudcommunity@tencent 删除原理数据库缓存数据性能

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1217551.html

相关标签:无
上传时间: 2025-07-25 09:31:32
留言与评论(共有 15 条评论)
本站网友 绿网天下
7分钟前 发表
用户表:user( uid bigint
本站网友 武术万维网
19分钟前 发表
这个表暂且称为主表;2. 将字段较长
本站网友 补肾的食物有哪些
10分钟前 发表
将一个属性较多
本站网友 婴儿不吃奶瓶怎么办
23分钟前 发表
…); user_ext( uid bigint
本站网友 奎蛇
5分钟前 发表
访问频率较低的属性尽量放在一个表里
本站网友 深圳万科金域东郡
16分钟前 发表
可能变成两个这样的表:user_base( uid bigint
本站网友 powervr
5分钟前 发表
这个表暂且称为主表;2. 将字段较长
本站网友 见效快
9分钟前 发表
以降低单库(表)大小
本站网友 欧莱雅化妆品怎么样
16分钟前 发表
1行大小为0.1k
本站网友 港口二手房
9分钟前 发表
补充阅读材料:《数据库水平切分+垂直拆分简介》文章很短
本站网友 特色养殖业
22分钟前 发表
可能变成两个这样的表:user_base( uid bigint
本站网友 yuantong
15分钟前 发表
长度较短的row
本站网友 杭州住房出租
10分钟前 发表
每个库(表)的属性至少有一列交集
本站网友 娃娃字体下载
6分钟前 发表
访问频率较高的属性尽量放在一个表里