动态分区

举报
JavaEdge 发表于 2022/08/31 23:50:44 2022/08/31
【摘要】 对于使用K范围分区的DB,若边界设置有问题,可能导致所有数据都挤在一个分区而其他分区基本为空,则设定固定边界、固定数量的分区将很不便:而手动去重新配置分区边界又很繁琐。对此,K范围分区的DB,如HBase采用动态创建分区:当分区的数据增长超过配置的阈值(HBase默认10GB),就会拆分成两个分区,每个承担一半数据量相反,若大量数据被删除,并且分区缩小到某阈值以下,则将其与相邻分区合并这有些...

对于使用K范围分区的DB,若边界设置有问题,可能导致所有数据都挤在一个分区而其他分区基本为空,则设定固定边界、固定数量的分区将很不便:而手动去重新配置分区边界又很繁琐。

对此,K范围分区的DB,如HBase采用动态创建分区:

  • 当分区的数据增长超过配置的阈值(HBase默认10GB),就会拆分成两个分区,每个承担一半数据量

  • 相反,若大量数据被删除,并且分区缩小到某阈值以下,则将其与相邻分区合并

这有些类似B树的分裂过程。

每个分区分配给一个节点,而每个节点可承载多个分区,和固定数量的分区一样。大分区拆分后,可将其中一半转移到另一个节点,以平衡负载。HBase中,分区文件的传输通过 HDFS实现。

动态分区的一个优点,分区数量可自动适配数据总量:

  • 若只有少量数据,少量分区就够,开销也很小

  • 若有大量数据,每个分区的大小则被限制在一个可配的最大值

但一个空DB,因为没有确定分区边界的先验信息,所以会从一个分区开始。数据集开始时可能很小,直到达到第一个分区的分裂点前,所有写操作都必须由单节点处理,而其他节点则处于空闲状态。为解决该问题,HBase、MongoDB允许在一个空DB配置一组初始分区(预分割,pre-splitting)。在K范围分区策略下,预分割需要提前知道K的分布情况。

动态分区不仅适于K的范围分区,也适用于hash分区。MongoDB 2.4 开始同时支持范围和hash分区,且都支持动态分割分区。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。