分布式系统之数据分片.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式系统之数据分片 分布式系统 (尤其是分布式存储系统)需要解决的两个最主要的问题,即数据分片和数 据冗余,下面这个图片(来源)形象生动的解释了其概念和区别: 其中数据即A、B属于数据分片,原始数据被拆分成两个正交子集分布在两个节点上。 而数据集 C 属于数据冗余,同一份完整的数据在两个节点都有存储。当然,在实际的分布 式系统中,数据分片和数据冗余一般都是共存的。 本文主要讨论数据分片的三个问题: (1)如何做数据分片,即如何将数据映射到节点 (2)数据分片的特征值,即按照数据中的哪一个属性(字段)来分片 (3)数据分片的元数据的管理,如何保证元数据服务器的高性能、高可用,如果是一 组服务器,如何保证强一致性。 所谓分布式系统,就是利用多个独立的计算机来解决单个节点(计算机)无法处理的 存储、计算问题,这是非常典型的分而治之的思想。每个节点只负责原问题(即整个系统 需要完成的任务)的一个子集,那么原问题如何拆分到多个节点?在分布式存储系统中,任 务的拆分即数据分片。 何为数据分片(segment,fragment, shard, partition),就是按照一定的规则,将 数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上 。注意, 这里提到,数据分片需要按照一定的规则,不同的分布式应用有不同的规则,但都遵循同样 的原则:按照最主要、最频繁使用的访问方式来分片。 三种数据分片方式 首先介绍三种分片方式:hash 方式,一致性hash(consistent hash),按照数据范围(range based)。对于任何方式,都需要思考以下几个问题: 1.具体如何划分原始数据集? 2.当原问题的规模变大的时候,能否通过增加节点来动态适应? 3.当某个节点故障的时候,能否将该节点上的任务均衡的分摊到其他节点? 4.对于可修改的数据(比如数据库数据),如果某节点数据量变大,能否以及如何将部 分数据迁移到其他负载较小的节点,及达到动态均衡的效果? 5.元数据的管理(即数据与物理节点的对应关系)规模?元数据更新的频率以及复杂 度? 为了后面分析不同的数据分片方式,假设有三个物理节点,编号为N0, N1, N2;有 以下几条记录: R0: {id: 95, name: aa, tag:older} R1: {id: 302, name: bb,} R2: {id: 759, name: aa,} R3: {id: 607, name: dd, age: 18} R4: {id: 904, name: ff,} R5: {id: 246, name: gg,} R6: {id: 148, name: ff,} R7: {id: 533, name: kk,} has 方式: 哈希表(散列表)是最为常见的数据结构,根据记录(或者对象)的关键值将记录映 射到表中的一个槽(slot ),便于快速访问。绝大多数编程语言都有对 has 表的支持,如 python 中的dict, C++ 中的map,Java 中的Hashtable,Lua 中的table 等等。在哈希表中, 最为简单的散列函数是 mod N (N 为表的大小)。即首先将关键值计算出hash 值(这里是 一个整型),通过对N 取余,余数即在表中的位置。 数据分片的hash 方式也是这个思想,即按照数据的某一特征(key)来计算哈希值,并 将哈希值与系统中的节点建立映射关系,从而将哈希值不同的数据分布到不同的节点上。 我们选择id 作为数据分片的key,那么各个节点负责的数据如下: 由此可以看到,按照has 方式做数据分片,映射关系非常简单;需要管理的元数据也 非常之少,只需要记录节点的数目以及has 方式就行了。 但hash 方式的缺点也非常明显:当加入或者删除一个节点的时候,大量的数据需要移 动。比如在这里增加一个节点N3,因此has 方式变为了mod 4,数据的迁移如下: 在这种方式下,是不满足单调性(Monotonicity)的:如果已经有一些内容通过哈希分 派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内 容可以被映射

文档评论(0)

136****8766 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档