数据库的水平切分和垂直拆分
数据库的数据量非常大时,常见的降低数据库大小,提升性能的方法是,水平切分和垂直拆分
水平切分是指,以某个字段为依据(例如uid),按照一定规则(例如取模),将一个库(表)上的数据拆分到多个库(表)上
特点是:
(1)每个库(表)的结构都一样
(2)每个库(表)的数据都不一样,没有交集
(3)所有库(表)的并集是全量数据
垂直拆分是指,将一个属性较多,一行数据较大的表,将不同的属性拆分到不同的表中
特点是:
(1)每个库(表)的结构都不一样
(2)一般来说,每个库(表)的属性至少有一列交集,一般是主键
(3)所有库(表)的并集是全量数据
垂直切分的依据是:
(1)将长度较短,访问频率较高的属性尽量放在一个表里,称为主表
(a)数据库有自己的内存buffer,会将磁盘上的数据load到内存buffer里
(b)内存buffer缓存数据是以row为单位的
(c)在内存有限的情况下,在数据库内存buffer里缓存短row,就能缓存更多的数据
(d)在数据库内存buffer里缓存访问频率高的row,就能提升缓存命中率,减少磁盘的访问
(2)将字段较长,访问频率较低的属性尽量放在一个表里,称为扩展表
(3)经常一起访问的属性,也可以放在一个表里
数据量并发量比较大时,数据库的上层都会有一个服务层
当应用方需要同时访问主表和扩展表中的属性时,服务层不要使用join来连表访问,而应该分两次进行查询
大数据高并发互联网场景下,吞吐量和扩展性是主要矛盾:
(1)join更消损耗数据库性能
(2)join会让base表和ext表耦合在一起(必须在一个数据库实例上),不利于数据量大时拆分到不同的数据库实例上
总结:
(1)降低数据量大小,提升数据库性能,用水平拆分和垂直拆分
(2)流量大,数据量大时,数据访问要有service层,并且service层不要通过join来获取主表和扩展表的属性
(3)垂直拆分的依据,尽量把长度较短,访问频率较高的属性放在主表里
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)