一种数据抽取方法及装置制造方法

文档序号:6623767阅读:233来源:国知局
一种数据抽取方法及装置制造方法
【专利摘要】本发明提供一种数据抽取方法,应用于关系型数据库,所述方法包括:根据选取的数据表中某字段的值域分布,将所述数据表分成M个数据分区,所述字段的类型为数值型或者所述字段的值能够转换成数值;根据所述各数据分区的数据行数计算所述各数据分区的权重;根据所述各数据分区的权重为所述各数据分区分配线程数;所述各数据分区分配的各线程数的总和等于预设的总线程数N,其中M≤N;开启N个线程,按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取。本发明通过对将数据表分为若干数据分区,动态分配各数据分区的线程数,解决了各线程分配数据不均匀的问题,提高了关系型数据的数据抽取效率。
【专利说明】一种数据抽取方法及装置

【技术领域】
[0001]本发明涉及数据抽取领域,具体涉及关系型数据库的数据抽取方法及装置。

【背景技术】
[0002]数据集成是把不同来源、格式和特点的数据在逻辑上或物理上有机地集中,从而提供全面的数据共享,是企业商务智能、数据仓库系统的重要组成部分。ETL是企业数据集成的主要解决方案。ETL中三个字母分别代表的是Extract、Transform、Load,即抽取、转换、加载。数据抽取是从数据源中抽取数据的过程。实际应用中,数据源较多采用的是关系型数据库。
[0003]从关系型数据库中抽取数据的方式可以分为直接导出备份数据和通过JDBC等接口读数据等方式。其中通过ODBC或者JDBC等接口读取的方式比较灵活,不仅可以进行数据的全量抽取,又可以进行增量抽取。然而,通过ODBC或者JDBC等接口抽取数据的方式如果不采用多线程并行的话效率会比较低,特别是大数据时代到来的今天,经常需要抽取具有上亿条数据的数据库表。多线程并行抽取数据需要对数据源中的数据进行预分割,如果每个线程分配的数据条目分布不均,多线程的效率会大打折扣;但是如果想要让每个线程分配的数据十分均匀,需要计算数据表中数据的详细分布情况,这样在抽取数据之前需要做大量的数据库操作,影响抽取数据的效率。本专利提出数据预分区的概念,通过简单的数据库预操作获取每个数据分区的数据条目数,并按照数据条目数为每个分区动态分配抽取数据的线程,可以有效解决上述难题。


【发明内容】

[0004]本发明所要解决的技术问题是提供一种关系型数据库的数据抽取方法,以提高数据抽取的效率。
[0005]为了解决上述技术问题,本发明提供了一种数据抽取方法,应用于关系型数据库,所述方法包括:
[0006]根据所述各数据分区的数据行数计算所述各数据分区的权重;
[0007]根据所述各数据分区的权重为所述各数据分区分配线程数;为所述各数据分区分配的线程数的总和等于预设的总线程数N,其中M < N ;
[0008]开启N个线程,按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取。
[0009]较佳地,
[0010]所述根据所述各数据分区的数据行数计算所述各数据分区的权重包括:
[0011]获取所述各数据分区的数据行数Cm,I < m < M ;
[0012]第m个数据分区的权重为Wni, Wm=^, C = C1+…+(;+...+CM,各数据分区的权重之和为I ;
[0013]所述根据所述各数据分区的权重为所述各数据分区分配线程数包括:
[0014]为第m个数据分区分配线程数INT(WmN),INT为向下取整;
[0015]将剩余未分配的线程数N。分配到所有数据分区中的N。个数据分区中,其中,

【权利要求】
1.一种数据抽取方法,应用于关系型数据库,其特征在于,所述方法包括: 根据选取的数据表中某字段的值域分布,将所述数据表分成M个数据分区,所述字段的类型为数值型或者所述字段的值能够转换成数值; 根据所述各数据分区的数据行数计算所述各数据分区的权重; 根据所述各数据分区的权重为所述各数据分区分配线程数;所述各数据分区分配的各线程数的总和等于预设的总线程数N,其中M < N ; 开启N个线程,按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取。
2.如权利要求1所述的方法,其特征在于: 所述根据所述各数据分区的数据行数计算所述各数据分区的权重包括: 获取所述各数据分区的数据行数Cm,I < m < M ; 第m个数据分区的权重为Wni, Wn =&,C = C1+…+(;+...+(;,各数据分区的权重之和为

CI ; 所述根据所述各数据分区的权重为所述各数据分区分配线程数包括: 为第m个数据分区分配线程数INT (WfflN),INT为向下取整; 将剩余未分配的线程数N。分配到所有数据分区中的N。个数据分区中,其中,
m=MN。二 N-Yj nmt(m) ο
m=l
3.如权利要求2所述的方法,其特征在于: 根据所述各数据分区的权重为所述各数据分区分配线程数之后,所述开启N个线程前,还包括: 如果数据分区分配的线程数大于等于2,则将该数据分区均分成数据子分区,该数据分区的数据子分区的个数为该数据分区分配的线程数,该数据分区的每个数据子分区对应一个线程。
4.如权利要求3所述的方法,其特征在于: 根据所述各数据分区的权重为所述各数据分区分配线程数之后,所述开启N个线程前,还包括: 将第i个数据分区与第j个数据分区合并,其中所述第i个数据分区分配的线程数为0,所述第j个数据分区分配的线程数不为0,I < i < M,I < j < M,i不等于j。
5.如权利要求4所述的方法,其特征在于: 所述按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取包括: 分别按照分配给所述各数据分区的各数据子分区的线程数,采用相应数量的线程对各数据子分区进行数据抽取。
6.一种数据抽取装置,应用于关系型数据库,其特征在于,所述装置包括分区模块、分配模块和抽取模块,其中, 所述分区模块用于根据选取的数据表中某字段的值域分布,将所述数据表分成M个数据分区,所述字段的类型为数值型或者所述字段的值能够转换成数值; 所述分配模块进一步包括权重计算单元和线程分配单元; 所述权重计算单元用于根据所述各数据分区的数据行数计算所述各数据分区的权重; 所述线程分配单元用于根据所述各数据分区的权重为所述各数据分区分配线程数;所述各数据分区分配的各线程数的总和等于预设的总线程数N,其中M < N ; 所述抽取模块用于开启N个线程,按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取。
7.如权利要求6所述的装置,其特征在于: 所述权重计算单元用于根据所述各数据分区的数据行数计算所述各数据分区的权重是指: 获取所述各数据分区的数据行数Cm,I < m < M ; 第m个数据分区的权重为W111,C = &+...+(;+...+CM,各数据分区的权重之和为I ; 所述线程分配单元用于根据所述各数据分区的权重为所述各数据分区分配线程数是指: 为第m个数据分区分配线程数INT (WfflN),INT为向下取整; 将剩余未分配的线程数N。分配到所有数据分区中的N。个数据分区中,其中,N。=N 。m=l
8.如权利要求7所述的装置,其特征在于,所述装置还包括子分区模块, 所述子分区模块用于当线程分配单元为数据分区分配的线程数大于等于2时,则将该数据分区均分成数据子分区,该数据分区的数据子分区的个数为该数据分区分配的线程数,该数据分区的每个数据子分区对应一个线程。
9.如权利要求8所述的装置,其特征在于,所述装置还包括合并模块, 所述合并模块用于将第i个数据分区与第j个数据分区合并,其中所述第i个数据分区分配的线程数为O,所述第j个数据分区分配的线程数不为O,I < i < M,I < j < M,i不等于j。
10.如权利要求9所述的装置,其特征在于: 所述抽取模块按照所分配的线程数,分别对所述各数据分区采用相应数量的线程进行数据抽取是指: 分别按照分配给所述各数据分区的各数据子分区的线程数,采用相应数量的线程对各数据子分区进行数据抽取。
【文档编号】G06F17/30GK104182502SQ201410406481
【公开日】2014年12月3日 申请日期:2014年8月18日 优先权日:2014年8月18日
【发明者】曹连超, 辛国茂, 亓开元, 刘伟, 李占强, 卢军佐 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1