分布式数据库从入门到实战
彭旭
惟客数据总架构师
757 人已学习
新⼈⾸单¥59
分布式数据库从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

05|分布式数据库如何合理分区与设计行键?

你好,我是彭旭。
上一讲我们介绍了事务和 MVCC,说到分布式数据库(比如 HBase)对事务的支持较弱,甚至 StarRocks、ClickHouse 是不支持传统事务的。这是因为分布式数据库涉及多个服务器,跨表跨行事务需要协调集群多个节点,复杂性大大提高了。
不过,分布式数据库在牺牲了一部分事务的支持之后,也带来了一个主要的优势。它会将数据分片,然后分散到集群的各个节点,合理利用分布式集群的能力,从而实现弹性伸缩和负载均衡。
那么如何更好地分区,从而实现弹性伸缩和负载均衡呢?这就是咱们这节课要讨论的重点内容。

从分库分表说起

在传统关系型数据库领域流传着一个说法,说是 MySQL 单表数据量如果大于 2000 万行,性能会明显下降。你有想过这是为什么吗?
我们知道,在 InnoDB 存储引擎里一般使用 B+ 树作为索引存储数据结构,而 B+ 树的查询性能与树的高度息息相关,树的高度每加 1,起码就会多一次磁盘的寻道 I/O。InnoDB 最小存储单元是页,B+ 树一个节点(叶子节点或非叶子节点)的大小就是一页。而一个页的大小默认是 16KB。
好,现在我们来算一下以 B+ 树为索引的情况下,不同高度的 B+ 树能够索引一个表的多少数据行。注意,这里我们是以主键为索引,数据聚簇存储的情况下计算。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

1. 分布式数据库的分区设计需要合理利用分布式集群的能力,实现弹性伸缩和负载均衡。 2. 分布式数据库的分区是弹性伸缩的基础单元,根据主键/分区键的不同,将表的数据根据规则拆分到不同的服务器上,称之为数据分区(Partition)。 3. 分区的核心在于均衡,避免热点分区,需要根据分区键优化查询,通过在查询中附带分区键,将读写限定在一个分区的范围。 4. 分布式数据库的分区设计需要避免不合理的分区拆分,以充分利用集群的能力,将数据存储和读写请求均匀分布到每台机器上,避免引发分区迁移和集群雪崩。 5. HBase中使用的是区间分区的方式,相邻的行键组成了一个个区间,形成分区,同时提供了分区的动态拆分能力。 6. StarRocks的分区方式更类似于关系型数据库,可以选择任意字段作为分区键,并支持表达式分区、List分区,以及分区后的分桶机制来平衡性能.

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库从入门到实战》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)