分布式数据库 30 讲
王磊
光大银行首席数据架构师
29144 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 34 讲
结束语 (1讲)
分布式数据库 30 讲
15
15
1.0x
00:00/00:00
登录|注册

06 | 分片机制:为什么说Range是更好的分片策略?

多个副本的同步
分散在所有节点上
存储在某个中心点
复制组(Group)提供更高的可靠性和资源使用效率
分片是高可靠的最小组织单位
根据访问压力调度分片
自动完成分裂与合并
动态分片
用主键作为关键字进行分片
适用于更高效地扫描数据记录
静态方式
以业务的预估进行分片
适用于并发写入性能更好
静态分片方式
一致性Hash算法
按照数据记录中指定关键字的Hash值将数据记录映射到不同的分片中
动态
静态
Range
Hash
元数据存储
分片与高可靠的关系
Range动态分片
Range静态分片
Hash分片
分片的调度机制
分片策略
数据表的组成单位
数据记录的集合
水平切分数据表的方式
思考题
NewSQL
PGXC
分片机制
分片
分布式数据库的分片机制

该思维导图由 AI 生成,仅供参考

你好,我是王磊,你也可以叫我 Ivan。
在这一讲的开头,我想请你思考一个问题,你觉得在大规模的业务应用下,单体数据库遇到的主要问题是什么?对,首先就是写入性能不足,这个我们在第 4 讲也说过,另外还有存储方面的限制。而分片就是解决性能和存储这两个问题的关键设计,甚至不仅是分布式数据库,在所有分布式存储系统中,分片这种设计都是广泛存在的。
所以今天,就让我们好好了解一下,分片到底是怎么回事儿。

什么是分片

分片在不同系统中有各自的别名,Spanner 和 YugabyteDB 中被称为 Tablet,在 HBase 和 TiDB 中被称为 Region,在 CockraochDB 中被称为 Range。无论叫什么,概念都是一样的,分片是一种水平切分数据表的方式,它是数据记录的集合,也是数据表的组成单位。
分布式数据库的分片与单体数据库的分区非常相似,区别在于:分区虽然可以将数据表按照策略切分成多个数据文件,但这些文件仍然存储在单节点上;而分片则可以进一步根据特定规则将切分好的文件分布到多个节点上,从而实现更强大的存储和计算能力。
分片机制通常有两点值得关注:
分片策略
主要有 Hash(哈希)和 Range(范围)两种。你可能还听到过 Key 和 List,其实 Key 和 List 可以看作是 Hash 和 Range 的特殊情况,因为机制类似,我们这里就不再细分了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式数据库的分片机制是解决大规模业务应用下单体数据库性能和存储限制的关键设计。分片是一种水平切分数据表的方式,将数据记录划分为集合,是数据表的组成单位。分片机制主要包括分片策略和分片的调度机制。在分片策略中,Hash和Range是主要的两种方式,而在调度机制中,静态和动态是两种常见方式。Hash分片通过Hash值将数据记录映射到不同的分片中,实现了数据均匀分布和并发写入性能的优势,但对于扩展性和业务热点问题存在挑战。而Range分片则能够更好地加入对业务的预估,实现数据更加平衡的分片,但受限于单体数据库的实现机制,难以随数据变动和负载变化而调整。NewSQL数据库也支持Hash和Range两种分片方式,其中Range动态分片是重点学习对象。总的来说,Range分片在扫描数据记录和适用范围上具有优势,但在动态调整方面仍存在挑战。 Range动态分片是NewSQL的重点学习对象,它具有自动完成分裂与合并、根据访问压力调度分片的优势。此外,NewSQL架构下,分片采用Paxos或Raft算法可以构成复制组,提供了更高的可靠性和更高效的资源使用。与PGXC相比,NewSQL的分片是高可靠的最小单元,而PGXC的分片的高可靠要依附于节点的高可靠。从架构设计角度看,NewSQL的Group比PGXC的Set更具优势,因为Group的高可靠单元更小,出现故障时影响的范围就更小,系统整体的可靠性就更高。Range分片的优势在于动态调度,但客户端需要知道分片的位置,因此元数据的存储和同步也是一个重要问题。 总的来说,本文介绍了分布式数据库分片机制的关键设计和技术特点,以及NewSQL的Range动态分片和其优势。这些内容对于读者快速了解分布式数据库的分片机制和技术特点具有重要参考价值。

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

全部留言(19)

  • 最新
  • 精选
  • 扩散性百万咸面包
    思考题: 大部分分布式系统都有这么一个存储元数据的东西,比如TiDB的PD,HBase里的ZK,k8s的etcd。也可以把他们看成存储小数据的KV存储系统,一般通过Raft或者Paxos来维持共识,就跟普通分布式系统一样

    作者回复: 是的:)

    2020-09-09
    2
    18
  • 真名不叫黄金
    猜测一下,如果是TiDB的话,将元数据存在PD,而PD本身又可部署为多节点高可用的,不过数据最终是落在etcd的,PD只是交互节点。 Spanner如何做的就不太好猜测,但是Spanner也有PD这个角色,也许是差不多的。

    作者回复: 是的,基本正确,点赞。另外,TiDB还做了一些优化,详细的内容在第7讲有说明

    2020-08-22
    4
    9
  • 扩散性百万咸面包
    Hash 分片写性能出众,但查询性能差,Range 则相反。 没懂这一句话,文章中哪里有详细阐释为什么Hash分片的写性能更好呢?为什么Range的写性能就不行呢?

    作者回复: Hash分片会将数据比较均匀的分散在集群的各个节点上,所以性能更好,而Range的数据分布是根据编码规则(静态)或者主键(动态)的,不以追求平均分布为目标,所以性能会差些。这个性能差异问题,我在第17讲还会再说明。

    2020-08-22
    2
    8
  • 开心哥
    元数据搞个etcd存起来如何?

    作者回复: 嗯,说得对,这是方案之一,点赞

    2020-08-21
    4
  • 旅途
    多数采用半同步复制,平衡可靠性和性能。这意味着,所有分片的主副本必须运行在 Set 的主节点上。 老师,这句话没懂,为什么使用半同步复制,所有分片的主福本都运行在set主节点呢

    作者回复: 这是由单体数据库的主从复制机制决定的,无论哪种策略,都是以节点为单位的,从节点不能提供确保数据一致性的服务。

    2020-09-24
    3
  • 游弋云端
    元数据集中存储,特别是能用全内存性能最好,但可靠性不足,一般做HA;或者元数据可以做一致性Hash来分片打散,个人认为Range不适合元数据,变化了数据位置不好计算。

    作者回复: Hash分片确实是无主架构常采用的一种方式,不过CockroachDB的Range分片也是一个不错的思路

    2020-08-21
    1
  • 楚翔style
    hash环那里,A(0-3)表示只能放3个hash值吗?这个区间可以随意设置吗?

    作者回复: 这里只是举例,数量要由实现的具体算法控制

    2020-10-16
  • 扩散性百万咸面包
    老师,PGXC的这种模式,如果按Set来分片的话,那么为什么不能像Multi Raft Group一样,主Set副本分布在不同节点呢?这样就可以把读写压力分摊在不同节点上了。
    2020-09-20
    1
    4
  • 南国
    分片数据存在分布式文件系统里,元数据像bigtable一样用一个高可靠的协调中心存,比如Zookeeper,在合并和分裂的时候修改元数据,客户端缓存需要的元数据,修改的时候通知即可
    2020-08-22
    4
  • yang
    hash--分片,基于hash槽的设计几乎没讲--,比如redis-cluster--事实上这种在大规模应用中反而会更多。
    2021-04-25
    3
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部