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
《分布式数据库从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论