(6)数据分区

概要:1分区方式:关键字、哈希值、解决负载倾斜

           2分区与二级索引:基于文档(读慢)、基于词条(读快,写慢)

           3分区再平衡:固定数量分区(调与节点关系)、动态分区(阈值)、按节点比例分区

           4请求路由:任意节点(有则处理,没有转发)、发路由层(转发)、感知分区和节点关系

一、分区方式

目标均匀分布。最繁忙几个为热点。知道数据在哪,避免向所有查

1、基于关键字分区

为每个分区分配一段连续关键字区间。根据关键字所在区间上下限,直接请求节点

缺点:数据倾斜,如单词表,x,i,o等开头单词少

解决:调整分区边界、选合适关键字

2、基于关键字的哈希值分区

优点:更均匀:并不能均匀分配负载,需一致性哈希。

缺点:失去良好区间查询特性,相邻关键字可能在不同分区

3、解决负载倾斜

同一个关键字的大量读写,所有请求都到同一个分区。如明星分手

应用层解决:关键字后面添加两位数序号,分配到100个不同的分区上。但合并开销大

二、分区与二级索引

二级索引:不能唯一标识一条记录,不能规整映射到分区

1、基于文档

分区完全独立,各自维护自己二级索引。查时向所有分区发读请求,合并结果,代价高

2、基于词条

构建全局索引,也分区。

优点:读高效,索引中包含的词条为关键字,向包含该词条的分区查询

缺点:写慢,因为更新数涉及多个二级索引写放大(可能在不同节点上)。都是异步更新,刚不即查到

三、分区再平衡

增加cpu、磁盘、内存后,或者节点故障后,负载再平衡过程中保持可用性。避免不必要迁移,减少网络和磁盘I/O。动态再平衡策略:

1、固定数量分区

分区总数分区和关键字映射关系不变节点数变调整分区和节点映射关系

2、动态分区

自动调整分区边界。到一个阈值时,分裂,转移到其他节点平衡负载,类似b树

优点:自动适配,少量数据开销小,大量数据可配置最大值

3、按节点比例分区

前两种策略,分区数节点数无关。

此策略,节点分区数固定。节点数不变时,分区数据量和数据集大小正比。新节点加入,随机选固定数分区进行分裂。ps:随机选前提是基于哈希分区(可一致性哈希),如Cassandra和Ketama

五、请求路由

客户端如何知道连哪个节点:

1、允许连接任意节点,如节点有请求的分区,则处理,否则转发给别的节点。

2、发送给路由层,转发给对应节点

3、感知分区和节点关系,连接到目标节点

Zk:每个节点向zk中注册自己,zk维护分区到节点关系。客户端向zk订阅,分区和节点变时,zk主动通知路由层

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么要进行数据复制? 让数据在地理位置上距离用户更近,从而带来更低的延迟当部分组件出现故障时仍然保持可用状态,实...
    log_gol阅读 688评论 0 1
  • 综述 本章主要介绍了切分大型数据集的若干方法,即如何分区;再讨论数据索引如何影响分区;接下来讨论了分区的再平衡,这...
    构建者阅读 128评论 0 0
  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,386评论 0 34
  • 进入到第六章了,我们要开始聊聊分布式系统之中的核心问题:数据分区。分布式系统通常是通过大规模的数据节点来处理单机没...
    LeeHappen阅读 1,024评论 0 7
  • 目录 范围分区vs哈希分区 二级索引的全局所以和分区索引 分区重平衡(海量,动态,按节点比例) 请求路由 (3种r...
    西部小笼包阅读 561评论 0 1