首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
物联网/工业互联网
›
物联网
›
水中分库分表的方法计谋
返回列表
发新帖
水中分库分表的方法计谋
[复制链接]
发表于 2026-1-17 18:12:01
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
分库分表先容
在当前业务量迅猛增长的环境下,
数据库
常常面对
性能
的极致寻衅。尤其是在处理处罚大规模的数据集,比方高出万万条数据纪录的环境下,SQL查询的
性能
将显着降落。随着数据量的增长,查询所必要扫描的数据范围变得更广,从而导致查询速率的减慢。
别的,数据规模的膨胀也会对
数据库
的团体
性能
产生影响。比方,一个
数据库
如果负担了过大的数据容量,大概会遭遇
存储
空间和I/O性能的困难。
存储
空间的题目体现为数据库必要更多的硬件资源来
存储
数据,而I/O性能的题目则是由于大量的数据必要读写,而读写利用的服从受到硬件性能的限定。
在表布局中,字段数目的增多同样会对服从产生负面影响。字段数目的增多意味着每个纪录的巨细增长,从而导致数据的读写速率降落。
为相识决上述题目,接纳分库分表计谋被广泛以为是有效的办理方案之一。分库分表计谋的焦颔首脑是将一个大型的数据库分解为多个小型的数据库,从而将数据分散存储在差异的地方,淘汰单点压力,进步查询服从。
分库有垂直分库、水中分库;分表有垂直分表、水中分表。具体先容可参考:数据库分库分表实践
数据热门先容
数据热门
也叫数据倾斜,是指在构建数据存储架构时,通常会依据某种特定标识,如ID或年份,将数据分配至各个差异的表中。然而,在现实运用中,近期数据常常在某个特定的表中高度会集。这就导致了在一样平常业务利用中,对这些近期数据的频仍访问,进而引发了对此特定表的高频次利用。与此同时,对其他分表的访问频率则相对较低。
只管接纳分表计谋在肯定程度上淘汰了团体的数据利用量,但这种计谋无法完全办理单张表所遭受的巨大访问压力。数据的总量被分散至多个表中,但在特定的时间点或特定的业务场景下,仍然会有大量的数据利用哀求会集到某一张表上。这就导致了这张表的访问压力巨大,大概会引发性能瓶颈,从而影响整个体系的稳固运行。
水中分库分表的计谋
这里重要先讲水中分表的计谋,水中分库的计谋可以在此底子上扩展。
一、按数据区间分别
以电商订单表为例,可将表的主键ID按肯定命值举行分表,或按年份举行分表,具体缘故起因如下。
电商订单表的主键ID做为分表计谋的判断条件,可以提拔数据处理处罚和查询的服从。比方,可以将主键ID按照肯定的数值范围举行分表,如许每个分表就可以独立举行数据查询和更新利用,从而淘汰大型数据库利用时的延长。
大概,可以将订单表按照年份举行分表。如许做的利益是,当必要对某一特定年份的订单数据举行深入分析时,可以直接访问那一年份的分表,而不必要扫描整个订单表,可以显着进步数据查询的速率和服从。
主键ID按肯定命值举行分表:
订单表A(每1000万分表)
ID
标题
别的字段
1某某某某某某某某某某某某某某某某某某某某某某…某某某某某某某某某某某某某某某某某某某某某某10000000某某某某某某某某某某某某某某某某某某某某某某 订单表B(每1000万分表)
ID
标题
别的字段
10000001某某某某某某某某某某某某某某某某某某某某某某…某某某某某某某某某某某某某某某某某某某某某某20000000某某某某某某某某某某某某某某某某某某某某某某按年份举行分表:
订单表2023(2023年订单)
ID
标题
年份字段
…某某某某某某某某某某2023年创建时间…某某某某某某某某某某2023年创建时间…某某某某某某某某某某2023年创建时间 订单表2024(2024年订单)
ID
标题
年份字段
…某某某某某某某某某某2024年创建时间…某某某某某某某某某某2024年创建时间…某某某某某某某某某某2024年创建时间
数据区间分别优点
具有良好的扩展性,无需举行
数据迁移
。当数据量增长1万万或接待新的年度时,仅需新增一张表即可,原有数据无需迁移。
数据区间分别缺点
会遇到所谓的“数据热门”题目。这是由于,不管是根据ID还是按照年份来分别数据,近期数据通常会集中存储在同一张表中。在一样平常业务利用中,对这些数据的频仍访问会导致对某张表举行高频率的利用,而对其他分表的访问则相对较少。只管分表计谋低沉了团体的数据利用量,但单张表的访问压力依然很大。
在实行水中分库计谋时,同样大概会出现某个数据库负担高频访问负担,而其他数据库访问量则相对较低的征象。
二、按哈希取模分别
哈希取模计谋是一种数据处理处罚方法,它通过对数据举行哈希运算后,再对其效果举行取模利用,从而将数据映射到特定的库或表中。这个取模运算通常与库的数目或表的数目相对应,因此涉及的数值是固定稳定的。
以PHP
代码
为例分析哈希取模的逻辑
// 订单ID数据
$key = "2811285227";
// 映射的数量
$numberOfBuckets = 4;
// 使用crc32()函数获取字符串的哈希值
$hash = hash('crc32', $key);
// 使用取模运算符将哈希值映射到特定范围
$bucketIndex = intval(abs(crc32($key)) % $numberOfBuckets);
echo "Key '{$key}' 映射取模为 {$bucketIndex} .";
// 当前程序运行结果为 Key '2811285227' 映射取模为 2 .
复制
代码
以电商订单表为例,此计谋涉及将单一的订单表拆分为4个子表。在此过程中,利用订单标识(OrderID)作为哈希函数的输入,通过取模运算决定命据存储的具体位置。
比方,若运算效果为2,相应的订单数据将被写入第二张子表。这种方法确保了数据在存储时的匀称分布,进而提拔了数据检索和管理的服从。
具体逻辑如下图所示:
哈希取模分别的优点
在处理处罚数据时,将有效制止数据会集的热门题目。
哈希取模分别的缺点
倒霉于扩容,具体来说,当数据库容量必要增长时,由于模数的改变,之前存储的数据必要重新举行取模运算,并重新分配至新的数据库表中,这便涉及到了
数据迁移
的题目。
比方,若数据库在初始计划时接纳哈希取模方式分为4个子表,而在后续扩展时,必要从4张表增长到6张表,原有的数据分布将不再公道,必须重新举行盘算和分表,同时,旧有数据也必要举行迁移处理处罚。
接纳此类方法举行水中分库,同样也会遇到扩展容量的寻衅。
总结
两种方法均存在肯定题目,它们的优劣恰好相反。具体应用时必要团结现实环境来决定,理论上而言,接纳哈希取模的方式更贴近分库分表的初志,但同时也必要评估
数据迁移
所带来的潜伏风险。
回复
使用道具
举报
返回列表
浏览过的版块
DevOps与敏捷开发
Java
网络安全
云原生
数据仓库与分析
SQL-Server
公有云
Oracle
SAAS
道家人
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表