谈谈为什么要分库分表?

2024-05-17 16:47 网游攻略
最佳答案 前言 由于数据库的承载能力是有限的,当业务增长量达到一定规模后,数据库的性能就会达到瓶颈。于是产生了分库分表的解决方案,本文将详细讲解什..

前言

由于数据库的承载能力是有限的,当业务增长量达到一定规模后,数据库的性能就会达到瓶颈。于是产生了分库分表的解决方案,本文将详细讲解什么是分库分表,以及分库分表的原因和可能产生的问题。


一、为什么要分库分表?

1. 分库的原因

数据库的关键性能指标主要有 磁盘空间、内存、CPU 。在数据库配置无法升级的情况下,当数据量过大可能产生如下的一些问题:

  1. 磁盘空间不足,数据库将无法进行增删改等操作;
  2. CPU 或内存不足,则可能导致读写性能低产生慢 SQL,进而导致 数据库链接池被打满、内存溢出 等问题。

这时就需要进行分库操作,来保证数据库的稳定和性能。

2. 分表的原因

由于数据库的承载能力是有限的,当业务增长量达到一定规模后,数据库的性能就会达到瓶颈。就拿使用最多的 MySQL 来进行说明。

MySQL 的默认引擎是 InnoDB,数据是存在聚簇索引中,而聚簇索引的底层数据结构是 B+ Tree,即使 B+Tree 已经在 B Tree 的基础上优化了空间利用率,但是随着数据规模的增大,树的高度也会达到一定规模,高度能够决定磁盘IO的次数,磁盘IO次数越多,对于性能就会越低。

3. 微服务架构

现在大部分公司的系统架构都已是分布式系统和微服务架构,根据公司的业务划分,分解为功能单一的数据库。此时会需要进行分库分表操作。

二、数据量多大才需要分库分表?

如下图,根据阿里开发手册中描述,单表超 500 万行,或容量超 2GB 时推荐分库分表。但是具体的情况还是需要根据业务需求、数据库硬件配置、CPU 性能等方面综合评估。

除此之外,要想详细的估算出数据量的瓶颈,还需要根据表的结构以及索引情况,表的字段不同的类型占用的大小也不同,故每条数据占用的大小也不同, B+Tree 每一层的存储数据量的大小也会发生变化。

综上,数据量多大需要根据自身情况去评估,并不一定是网上所说的 1000 万,也不一定是阿里所说的大于 500 万,这就是有些企业单表数据即使超过几千万仍可稳定运行的原因。

三、什么是分库分表?

1. 分库

将数据库中的表按照某种规则拆分到多个数据库中,来保证系统的稳定和性能。

如图,将 DataBase 中的 2 张表拆分成 trade 库和 acount 库,分别存 order 表和 acount 表。

2. 分表

将表中数据按照某种规则拆分到多张表中,提升查询效率。

如图,将 order 表拆分成 order_shanghai 和 order_beijing,分别存上海和北京的订单数据。

四、如何分库分表?

分库分表的核心就是 数据切分(Sharding) ,以及切分后对数据的快速定位与结果整合,从而到提升数据库操作性能的目的。分库分表可以从垂直和水平两种纬度进行拆分。

1. 垂直拆分

垂直拆分包含垂直分库和垂直分表。

1.1 垂直分库

垂直分库指的是,将某个库中的表拆分到多个库,每个库包含的表不一样。一般主要是按照业务维度进行拆分,不同的业务数据放到对应的数据库中,核心理念是 转库专用 ,这也是微服务拆分的一个重要依据。

如图,在电商系统中,主要包含的业务有商品、用户、支付、库存等,在对数据库进行划分时,每个业务对应一个数据库。

垂直分库优点:

  1. 降低单数据库服务的压力,增加系统可用性;
  2. 业务清晰,各系统间解耦合;
  3. 提升 IO 性能,增加数据库链接数以及其他硬件的瓶颈。

垂直分库缺点:

  1. 不同库之间的数据一致性无法保证,需要通过分布式事务;
  2. 依然存在单库、单表数据过大的问题,需要结合水平拆分;

1.2 垂直分表

垂直分表指将存在一张表中的 不同字段 拆分为多张表,是一种 大表拆小表 的模式。拆分后的表字段、结构均不同,组合一起则是原表。

一般是将经常修改的、数据较大的、不常查询的字段拆分到“扩展表”中,这样拆分以后核心表大多是访问频率较高的字段,而且字段长度也都较短,减少了查询时的磁盘 IO,提升数据库效率。

如下图,我们在进行下单时一般需要存储快照信息,该字段有长且不常使用,故拆分出来可提高订单信息的查询效率。

垂直分表优点:

  1. 降低表的数据规模,提升效率;
  2. 减少单条数据占用空间,减少磁盘 IO。

垂直分表缺点: 依然存在单表数据过大的问题,需要结合水平拆分;

2. 水平拆分

水平拆分包含水平分库和水平分表。

2.1 水平分库

水平分库是将数据库中的表数据按照某种规则拆分到多个库中,以实现水平扩展,提升数据库读写性能。

一般切分到不同的库中的表结构是相同的,表中数据不同,且伴随水平分表。

如下图,将 DB-trade 库中的 order 表水平切分到 DB-trade 1 DB-trade 2 库中。

水平分库优点:

  1. 极大降低单库数据规模,提高系统高并发能力;
  2. 业务代码改动小,不需要拆分业务。

水平分库缺点:

  1. 跨库的 join 关联查询性能较差,增加开发复杂度;
  2. 单库的自增 ID 受影响。

2.2 水平分表

水平分表是将数据按照某种规则拆分到多张表,多张表还是属于一个库且结构相同。 大大减少单表数据量,提升查询效率,但是对数据库的压力没有帮助

如下图,一张 order 订单表有 400 万数据,经过水平拆分出来 2 个表 order_1 和 order_2,每张表存有数据 200万,以此类推。

水平分表优点:

  1. 大大减少单表数据量,提升查询效率;
  2. 业务代码改动小,不需要拆分业务。

水平分表缺点: 多张表属于一个库,数据库的压力仍存在。

五、分库分表可能有哪些问题?

1. 事务问题

分库可能导致一次事务的执行的数据不在同一个服务器上,数据库层面无法实现所有服务的事务操作。可能会产生数据不一致的情况。

解决方案是通过分布式事务,来能最大限度保证了数据库操作的原子性,详情见我的另一篇文章 分布式事务。

2. 主键唯一性问题

在数据库表设计时,经常会使用自增ID作为数据主键,这就导致后续在迁库迁表、或者分库分表操作时,会因为主键的变化或者主键不唯一产生冲突。

解决方案是通过一些策略生成全局唯一的分布式 ID,详情见我的另一篇文章 分布式 ID 。

3. 跨库多表join问题

拆分之前,应用中很多列表或详情的数据可以通过 join 来完成,但是分库拆分后,数据可能分布在不同的服务器上,这种跨节点的 join 会有很多问题。

解决方案是避免挂库多表 join 的产生:

  1. 可以采用多次查询业务层进行数据组装;
  2. 将存在关联关系的表拆分在同一数据库下;
  3. 字段冗余避免 join 查询。

4. 跨库聚合查询问题

跨库进行聚合查询时,如 group by,order by 等,会变的异常复杂,导致常需要复杂的业务代码才能实现上述业务逻辑。

解决方案有:

  1. 业务代码中分别查询,然后组装数据(可能需要用一些排序算法优化效率);
  2. 使用专业的分布式框架,比如开源框架:ElasticSearch;

结语

本文主要讲述的是我们在开发过程中为什么需要分库分表,以及分库分表的场景、方案和可能出现的问题。因为一些内容的扩展点还有很多,放在一起影响阅读,本文只是简单的讲述了分库分表的一些基础知识,后续会针对分库分表分片方案、常用中间件的原理和使用,以及如何完整落地一个分库分表方案进行开展。


参考:

[1] 程序员小富. 好好的系统,为什么要分库分表?

[2] 鹅厂架构师. 一文读懂数据库分库分表.


上一篇:《塞伯利亚之谜:之前的世界》超级抵抗者怎么解锁
下一篇:《漫客栈》底部信息显示设置方法
猜你感兴趣
uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统

uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统

原创 vue3+uniapp+uni-ui 跨端 仿ios桌面 后台 OA 管理模板 Uni-Vue3-WeOS 。 uniapp-vue3-os 一款基于 uni-app+vite5.x+pinia 等技术开发的 仿ios手机桌面OA 管理系统。实现了 自定义桌面栅格磁..

网游攻略 2024-05-22
dnSpyEx:一款强大的.NET反编译、编辑和调试工具

dnSpyEx:一款强大的.NET反编译、编辑和调试工具

说到.NET相关的反编译工具,大家脑海里第一个想到的是什么?ILSpy、dnSpy、还是dotPeek?今天我们将重点介绍一款名为dnSpyEx的开源.NET程序集反编译、编辑和调试工具。dnSpyEx是dnSpy项目的非官方Fork维护版本,具有强大的功能和灵活的使用方式。 dnSpyEx支持浅色、蓝色和深色主题,可用于调试 .NET Framework、.NET Core 和 Un..

网游攻略 2024-05-22
《原神》大伟丘15个刷新地点汇总

《原神》大伟丘15个刷新地点汇总

原神中新增加的奇怪的丘丘人每天会在不同的位置刷新,杀死二十个丘丘人就能完成一个成就。那么原神大伟丘的刷新地点都在哪里呢?下面小编为大家带来原神大伟丘15个刷新地点的汇总。 《原神》大伟丘15个刷新地点汇总 第一个位置:轻策庄。从传送点过去,飞到对面的梯田上,大伟丘就在广阔的田地里。 第二个位置:风龙废墟。从七天神像的传送点传送过去,在一个平台上。 第三..

网游攻略 2024-05-22
《暗黑破坏神4》s4电冲巧变回火有什么效果

《暗黑破坏神4》s4电冲巧变回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。电冲巧变的效果如下。 电冲巧变效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。电冲巧变的效果如下。 相关攻略:《暗黑破坏神4..

网游攻略 2024-05-22
《最终幻想7重生》防具赛特拉护腕2怎么获得

《最终幻想7重生》防具赛特拉护腕2怎么获得

《最终幻想7重生》是史克威尔·艾尼克斯制作发行的一款动作角色扮演游戏,是重制三部曲的第二部作品,于ps5平台独占发售。游戏中共有9个可操作角色,其中部分角色的装备可以通过不同的方式的来获取,下面为大家带来防具赛特拉护腕2获取攻略,希望有所帮助。 防具赛特拉护腕2怎么获得 所在章节:章节13 位置:野心神殿 在完成考验后继续向前走,下楼梯,然后进入右侧房间找到这..

网游攻略 2024-05-22
《暗黑破坏神4》s4大地巧变回火有什么效果

《暗黑破坏神4》s4大地巧变回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。大地巧变的效果如下。 大地巧变效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。大地巧变的效果如下。 相关攻略:《暗黑破坏神4..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》深渊票的使用方法介绍

《地下城与勇士手游(DNF手游)》深渊票的使用方法介绍

深渊票是《地下城与勇士手游(DNF手游)》中的一种重要道具,能够帮助玩家获取强力装备的入场券。使用深渊票进行深渊派对副本是获取高级装备的有效途径。那么,深渊票应该如何使用呢?以下将为大家详细介绍。 在游戏的委托栏中,深渊派对开始副本即可使用深渊票。使用深渊票后,会自动消耗一定数量进入副本。需要注意的是,如果在委托界面中看不见深渊派对的选项,那可能是因为玩家的等级还不够。 ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项

《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项

《地下城与勇士手游(DNF手游)》已经开服第二天,此时玩家的进度可能已经可以解锁造功、附魔等功能,同时委托副本也会解锁新的副本。以下是由“冉芝”带来的《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项,希望对大家有所帮助。 升到25级之后,可以开启游戏打造功能=徽章系统。因为强化和打造过渡装备没有意义,而只有徽章可以随时取下和佩戴。商城中可以购买4种颜色的徽章,分别镶嵌在玩家的..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》鬼泣PK技巧分享 鬼泣连招推荐

《地下城与勇士手游(DNF手游)》鬼泣PK技巧分享 鬼泣连招推荐

第1页: 展开

网游攻略 2024-05-22
《驾考宝典》更新题库方法

《驾考宝典》更新题库方法

在进行驾驶考试时,题库的更新至关重要。驾考宝典是一款备受欢迎的驾考学习软件,其题库的准确性和更新对考生来说具有极高的价值。下文将详细介绍如何在驾考宝典中更新题库,帮助考生们获取最新的驾驶考试资料,为顺利通过考试打下坚实的基础。 驾考宝典怎么更新题库? 1、首先打开驾考宝典软件,进入到首页后,可以切换到报名、直播课、买车、我的页面,然后点击右下角的【我的】; ..

网游攻略 2024-05-22
《地下城与勇士:起源》诱魔者职业介绍

《地下城与勇士:起源》诱魔者职业介绍

地下城与勇士:起源中的诱魔者职业备受关注。这个职业是女圣职者转职后的一种职业,在培养上有一定的技巧。下面将为大家介绍诱魔者的全面攻略,希望对感兴趣的玩家有所帮助。 《地下城与勇士:起源》诱魔者职业介绍 一、职业介绍 诱魔者是地下城与勇士中女圣职者的转职职业。擅长使用镰刀武器和重甲防具。一次觉醒称为断罪者,二次觉醒则是救世主。 二、技能加点 1、诱魔者重做..

网游攻略 2024-05-22
《决胜之心》风暴萨满角色介绍

《决胜之心》风暴萨满角色介绍

决胜之心风暴萨满如何?索德是兽人七大氏族中雷鸣氏族的长,年轻时是善于战斗的战士,后来被部族长老发现具有元素之力的天赋,成为出色的萨满并担任部族的酉长。以下是对这个角色的详细介绍,希望可以帮助大家了解。 《决胜之心》风暴萨满角色介绍 二、技能介绍: 1、雷霆图腾 在自身周围召唤一个【雷霆图腾】,继承80%输出属性,持续8秒。最多可同时存在..

网游攻略 2024-05-22
《地下城与勇士:起源》服务器上限解决方法

《地下城与勇士:起源》服务器上限解决方法

地下城与勇士起源服务器上限怎么办?在地下城与勇士手游公测当天,许多玩家遇到了服务器达到上限的问题,导致无法进入游戏。以下将介绍几种解决方法,希望对大家有所帮助。 《地下城与勇士:起源》服务器上限解决方法 答:等待官方优化、重新登录、换区注册。 1、等待官方优化 在公测首日出现服务器爆满的情况,官方一定会进行优化,但具体优化时间无法确定,玩家需要每隔一段时间尝试..

网游攻略 2024-05-22
《暗黑破坏神4》s4死灵法师效能回火有什么效果

《暗黑破坏神4》s4死灵法师效能回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。死灵法师效能的效果如下。 死灵法师效能效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。死灵法师效能的效果如下。 相关攻略:《..

网游攻略 2024-05-22
《歧路旅人:大陆的霸者》每日必做日常优先级

《歧路旅人:大陆的霸者》每日必做日常优先级

《歧路旅人:大陆的霸者》是一款非常像素风格的角色扮演类冒险游戏。游戏目前已经公测上线,其中的日常任务比较繁多。为了帮助玩家节省时间,下面给大家分享《歧路旅人:大陆的霸者》的每日必做日常优先级。 《歧路旅人:大陆的霸者》每日必做日常优先级 每日必做日常优先级如下: 1. 无名小镇: 获得经验值坚果、金币兑换物品、必杀技强化材料。 2. 讨伐请求/高级讨伐请求: ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》元素师PK技巧分享 元素师连招推荐

《地下城与勇士手游(DNF手游)》元素师PK技巧分享 元素师连招推荐

第1页: 展开

网游攻略 2024-05-22
《地狱之刃2塞娜的史诗》中圣柱与秘密路径全收集攻略

《地狱之刃2塞娜的史诗》中圣柱与秘密路径全收集攻略

地狱之刃2塞娜的史诗中的圣柱与秘密路径是两种收集要素,全部收集后也能解锁米德加德的故事与众神掠影两个成就。下面请看由“爱玩游戏的小透明”带来的《地狱之刃2塞娜的史诗》圣柱与秘密路径全收集攻略,希望对大家有用。 更多相关内容请关注: 地狱之刃2:塞娜的史诗专区 责任编辑:夏目贵志 本文是否解决了您的问题 已解决 0 未解决 ..

网游攻略 2024-05-22
文件系统(四):FAT32文件系统实现原理

文件系统(四):FAT32文件系统实现原理

FAT32是从FAT12、FAT16发展而来,目前主要应用在移动存储设备中,比如SD卡、TF卡。隐藏的 FAT文件系统 现在也有被大量使用在UEFI启动分区中。 为使文章简单易读,下面内容特意隐藏了很多实现细节,关于分区、格式化等相关的内容,可以查看之前的文章: 文件系统(一):存储介质、原理与架构 文件系统(二):分区、格式化数据结构 ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》黑话术语介绍

《地下城与勇士手游(DNF手游)》黑话术语介绍

第1页: 展开

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南

《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南

《地下城与勇士手游(DNF手游)》中宠物系统是玩家提升战力的方法之一,那么宠物与宠物装备要怎么获取呢?下面为大家带来《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南,希望可以帮到大家。 宠物的获取 礼包内赠品 购买师恩如明月礼包时,礼包内会赠送宠物礼盒。打开后,可以五种导师类宠物中选择1个。所选择的宠物品级是神器级,该宠物属性已经是目前较强的了。 商城 ..

网游攻略 2024-05-22
加载中...