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