#DBus# 关系型数据库全表扫描分片详解

作者:尹红春

导读:数据总线(DBus)专注于数据的实时采集与实时分发,可以对IT系统在业务流程中产生的数据进行汇聚,经过转换处理后成为统一JSON的数据格式(UMS),提供给不同数据使用方订阅和消费,充当数仓平台、大数据分析平台、实时报表和实时营销等业务的数据源。在本文中,我们从数据分片的角度出发,具体介绍DBus在数据采集的过程中,运用了什么样的分片策略和分片原理,以及过程中遇到的问题及解决方案。


一、分片策略

对于传统的关系型数据库,DBus通过提供全量数据拉取和增量数据采集两种途径满足用户数据采集需求。DBus数据抽取流程如下图所示(以MySQL为例):
这里写图片描述
全量数据采集的主要原理是:根据主键、唯一索引、索引等信息,确定分片列。之所以分片列要根据主键、唯一索引、索引等选择,是因为这些列的数据在库里建立了良好索引,能提升数据扫描的效率。

根据选定的分片列,对数据进行拆片,确定每片数据的上下界,然后根据每片上下界,以6~8左右的并发度,进行数据拉取。

注:6~8左右的并发度是经大量测试获得的经验值。实验显示,6~8左右的并发度既不会对源库形成过高压力,又能最大限度提升全量数据拉取的效率。

DBus分片策略示意图:
这里写图片描述

DBus拉取策略示意图:

这里写图片描述

那么,DBus支持什么类型的列作为分片列?不同类型的分片列,分片策略如何呢?

分片策略这块,DBus借鉴了Sqoop的分片设计,支持以下类型的列作为分片列:

BigDecimal/numeric
Boolean
Date/time/timestamp
Float/double
Integer/smallint/long
Char/Varchar/Text/NText

拆片原理大体一致,都是根据分片列的最大

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值