排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
图文并茂 | 水平分表的路由策略有哪些?什么是一致性哈希?
图文并茂 | 水平分表的路由策略有哪些?什么是一致性哈希?
大数据的奇妙冒险
2023-10-25
14
什么是水平分表
水平分表就是指以行为单位对数据进行拆分,将数据分别存储在多个相同表结构的表中。
一般是在数据量较大的情况使用,可以减轻数据库压力,提高效率。
水平分表的路由策略
范围分表
从字面的意思看很好理解,就是划定一个范围,比如第 0-1000 条数据放表一,1001-2000条放表二,以此类推;或者按照时间范围进行分表。
这样分表的
好处
是,扩容比较方便,一旦数据达到阈值需要进行扩容,只需要再加个表,往后的数据直接放新表。
但是
缺点
也比较明显,容易造成倾斜,存在读写偏移的情况,造成单表压力过大。
比如交易流水,每次发生交易都会往新表写,在查询习惯上,用户查最新的交易会比较多。
中间表映射
将分表 key 和表的映射关系存放在一张单独的表上,每次操作都先查询映射表,然后得到具体的表。比如设置一个中间表,其中一个字段是数据的 id,另一个字段是表的 id。
这样的
优点
就是比较灵活,可以自己定数据位置。
缺点
呢,就是中间表的数据会不断扩张,就算可以对其进行水平分表,但这样也形成一个恶性循环。
而且使得查询流程增加,一旦有多个中间表就得每个都查一遍。
Hash 分表
Hash 分表是将特定列或者特定的某几个列进行 hash 计算,然后路由到具体分表上。
比如说有三个分表,那可以进行哈希取模,结果为 1 的就放表一,为 2 就放表二,由此类推。
hash 分表的
优点
是可以使数据比较均衡的分布到每张分表中,但
可扩展性比较差
。
举个栗子,假如原先 3 个分表,现在再加一张,存量数据的 hash 值则需要重新计算以确定分发到哪张表,然后将数据进行迁移,一旦发生迁移,可用性就会降低。
在实际应用中,hash 分表其实是用得比较多的,但是普通哈希存在上述问题,那怎么办呢?
一致性 hash 算法
一致性 hash 算法的出现,解决了上述问题,它是分布式哈希算法,用于在分布式系统中解决节点动态变化带来的数据迁移问题。
假定有 2^32 个点组成一个环,有 3 个分表,然后我们用表的编号进行哈希计算后除以 2^32 取模后放到环上;
然后将数据也进行哈希计算后除以 2^32 取模后放到环上;
之后数据按照顺时针方向查找表,遇到的第一个表就存进去。
通过这样的方式,可以减少当修改节点时需要迁移的数据量。假设我们在 A3 和 A1 之间加一个表,那么需要迁移的数据就只有原本属于 A1 的部分数据。
但是一次性 hash 算法也存在问题,那就是当节点比较集中的情况下,就会导致数据倾斜,即大量的数据会存储在某些节点。
那么,这有什么解决办法吗?
当然是有的,一般是增加虚拟节点,即每张物理表映射出一个或多个虚拟节点,分布在环上,使得数据的存储更均匀(为了方便,每个节点只画了一个虚拟节点,真实场景一般需要多一些)。
当需要对数据进行读写的情况,只需要找到虚拟节点,然后再找到对应的真实节点,读取其数据即可。
最后,奉上封面图一张。如果觉得这篇文章对你有帮助,不妨点个小赞支持一下。欢迎关注
大数据的奇妙冒险。
点击下方名片关注【大数据的奇妙冒险】
末尾奉上封面图一张
一致性哈希
哈希
分布式一致性
哈希查找
hash
文章转载自
大数据的奇妙冒险
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨