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

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

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

什么是分片

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

全部留言(19)

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

    作者回复: 是的:)

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

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

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

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

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

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

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

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

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

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

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

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

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