一种对非分区表进行分区并行读取的方法及装置制造方法及图纸

技术编号:22308194 阅读:19 留言:0更新日期:2019-10-16 08:18
本发明专利技术涉及数据处理技术领域,具体涉及一种对非分区表进行分区并行读取的方法及装置,其中方法包括:对数据库中的非分区表进行分区定义;基于所述分区定义对非分区表进行分区,得到对应的多个分区;根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取。在进行分区定义时,支持的列类型为数值型、日期时间和字符型,支持的分区类型为范围分区和枚举分区。通过为非分区表进行分区定义来模拟关系数据库中的表分区,并根据每个模拟的分区动态生成该分区查询语句,然后将分区平均分配给多个工作线程读取,实现了对非分区表的分区并行读取,提高数据抽读取性能,减少了抽取时间以及报错概率。

A method and device for parallel reading of non partitioned tables

【技术实现步骤摘要】
一种对非分区表进行分区并行读取的方法及装置
本专利技术涉及数据处理
,具体涉及一种对非分区表进行分区并行读取的方法及装置。
技术介绍
分区表是关系数据库中普遍提供的一种将表分成若干个相对独立的分区,从而提升数据访问的性能的技术。合理使用分区表,可以解决普通表随着数据量的增加,数据的访问性能不断下降的问题。在数据集成项目实施的过程中,当源表数据量较大时,由于抽取时间通常比较长,会导致以下问题:1)需要长时间占用源数据库的资源,影响源数据库性能。2)占用数据库资源过长,超过数据库允许的查询时间,导致数据库报错,数据抽取中止。3)单次数据抽取时间过长,导致网络故障引起抽取失败的风险大大提高。对于上述问题,传统的解决方案是:如果源表为分区表,则先查询出数据库中该表的各个分区,然后并发查询读取每个分区的数据。然而,在实际使用过程中,并非所有数据量较大的表都是分区表,一方面是因为分区表创建较为复杂,用户最开始使用时对数据量估计不足或者设计时没有考虑到,导致没有使用分区表,这种情况很普遍;另一方面是因为分区表通常使用上会有些限制,比如mysql的分区表不能有外键等导致不能使用分区表。如果数据库中的源表为非分区表,则无法解决上述问题。鉴于此,克服上述现有技术所存在的缺陷是本
亟待解决的问题。
技术实现思路
本专利技术需要解决的技术问题是:在数据集成过程中,当源表数据量较大时,抽取时间通常比较长,会导致数据抽取性能下降、报错、网络故障等问题,如果源表为分区表,可实现分区并行读取,但并非所有数据量较大的表都是分区表,如果源表为非分区表,不能实现分区并行读取,则无法解决上述问题。本专利技术通过如下技术方案达到上述目的:第一方面,本专利技术提供了一种对非分区表进行分区并行读取的方法,包括:对数据库中的非分区表进行分区定义;基于所述分区定义对非分区表进行分区,得到对应的多个分区;根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取。优选的,所述对数据库中的非分区表进行分区定义具体为:在数据集成工具内,根据非分区表的数据特征从数据库中选择合适的分区列,使得非分区表中的数据能够均匀分布到各个分区;判断选择的各分区列的类型,并根据分区列类型确定需要定义的分区类型;用户根据需要定义的分区类型给出所需的相关参数,完成相应的分区定义。优选的,在进行分区定义时,支持的分区列类型包括数值型、日期时间型以及字符型,支持的分区类型包括范围分区和枚举分区;当分区列类型为数值型或者日期时间型时,使用范围分区;当分区列为字符型时,使用枚举分区;当定义范围分区时,用户给出的相关参数包括:分区列名称、分区列的最小值估计值、最大值估计值以及希望的分区数;当定义枚举分区时,用户给出的相关参数包括:分区列名称和每个可能的枚举值。优选的,所述基于所述分区定义对非分区表进行分区,得到对应的多个分区,具体包括:读取所述分区定义,并根据所述分区定义判断分区类型;对不同的分区类型,分别采用不同的方法计算分区范围;根据计算的分区范围,得到对应的多个分区。优选的,对于范围分区,计算分区范围的过程具体为:判断分区列类型,如果分区列类型为日期时间型则转换为数值型;根据用户给出的希望的分区数,确定最终分区数量;根据用户给出的分区列的最大值估计值、最小值估计值及确定的最终分区数量,计算每个分区的分区列的起始值和结束值。优选的,所述根据用户给出的希望的分区数,确定最终分区数量具体为:在用户给出的希望的分区数基础上加2,作为最终分区数量;其中,额外增加的2个分区分别为:一个包含最小可能值的分区和一个包含最大可能值的分区。优选的,对于枚举分区,计算分区范围的过程具体为:根据用户给出的每个可能的枚举值,确定每个分区的分区列的枚举值;其中,每个枚举值为一个分区,最终分区数量等于枚举值的个数。优选的,所述根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取,具体包括:将得到的多个分区平均分配给线程池中的多个工作线程执行;各工作线程根据分配的分区的属性,动态生成分区SQL查询语句;各工作线程执行对应的SQL查询,并输出查询结果。优选的,在所述对数据库中的非分区表进行分区定义之前,所述方法还包括:当在数据库中查询的源表为非分区表时,计算对应非分区表的数据量,并将所述数据量与预设阈值进行比较;其中,当所述数据量大于所述预设阈值时,对该非分区表进行分区定义;当所述数据量小于等于所述预设阈值时,直接对该非分区表进行数据查询读取。第二方面,本专利技术还提供了一种对非分区表进行分区并行读取的系统,完成第一方面所述的对非分区表进行分区并行读取的方法,包括依次连接设置的分区定义模块、元数据存储模块和分区查询模块;所述分区定义模块用于在数据集成工具内部为非分区表进行分区定义,并将分区定义发送到所述元数据存储模块;所述元数据存储模块用于接收所述分区定义模块发送来的分区定义信息,并将分区定义信息存储到文件或者数据库中;所述分区查询模块用于从所述元数据存储模块中读取分区定义,根据分区定义计算分区范围,进而根据每个分区动态生成分区查询语句,并将分区分配给多个工作线程读取。优选的,所述分区查询模块内设有线程池和SQL语句生成模块;所述线程池内包括多个工作线程,以便所述分区查询模块将计算得到的各分区平均分配给所述线程池中的多个工作线程执行;所述SQL语句生成模块用于各工作线程根据分配的分区动态生成分区SQL查询语句,以便工作线程执行SQL查询并输出查询结果。第三方面,本专利技术还提供了一种对非分区表进行分区并行读取的装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成第一方面所述的对非分区表进行分区并行读取的方法。与现有技术相比,本专利技术的有益效果是:本专利技术通过为非分区表进行分区定义来模拟关系数据库中的表分区,并根据每个模拟的分区动态生成该分区查询语句,然后将分区平均分配给多个工作线程读取,从而实现了对非分区表的分区并行读取,提高数据抽取性能,减少了抽取时间以及数据库或者数据抽取工具报错的概率。同时,在定义范围分区时无需用户给出每个分区的精确范围,只需给出分区列的最大值和最小值的估计值即可,从而大大简化了分区的定义。【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的一种对非分区表进行分区并行读取的方法流程图;图2为本专利技术实施例提供的一种对非分区表进行分区并行读取的系统组成图;图3为本专利技术实施例提供的一种对非分区表定义分区的方法流程图;图4为本专利技术实施例提供的一种分区查询模块的运行流程图;图5为本专利技术实施例提供的一种范围分区的分区范围计算流程图;图6为本专利技术实施例提供的一种对非分区表进行分区并行读取的装置的架构图。【具体实施方式】为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描本文档来自技高网...

【技术保护点】
1.一种对非分区表进行分区并行读取的方法,其特征在于,包括:对数据库中的非分区表进行分区定义;基于所述分区定义对非分区表进行分区,得到对应的多个分区;根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取。

【技术特征摘要】
1.一种对非分区表进行分区并行读取的方法,其特征在于,包括:对数据库中的非分区表进行分区定义;基于所述分区定义对非分区表进行分区,得到对应的多个分区;根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取。2.根据权利要求1所述的对非分区表进行分区并行读取的方法,其特征在于,所述对数据库中的非分区表进行分区定义具体为:在数据集成工具内,根据非分区表的数据特征从数据库中选择合适的分区列,使得非分区表中的数据能够均匀分布到各个分区;判断选择的各分区列的类型,并根据分区列类型确定需要定义的分区类型;用户根据需要定义的分区类型给出所需的相关参数,完成相应的分区定义。3.根据权利要求2所述的对非分区表进行分区并行读取的方法,其特征在于,在进行分区定义时,支持的分区列类型包括数值型、日期时间型以及字符型,支持的分区类型包括范围分区和枚举分区;当分区列类型为数值型或者日期时间型时,使用范围分区;当分区列为字符型时,使用枚举分区;当定义范围分区时,用户给出的相关参数包括:分区列名称、分区列的最小值估计值、最大值估计值以及希望的分区数;当定义枚举分区时,用户给出的相关参数包括:分区列名称和每个可能的枚举值。4.根据权利要求3所述的对非分区表进行分区并行读取的方法,其特征在于,所述基于所述分区定义对非分区表进行分区,得到对应的多个分区,具体包括:读取所述分区定义,并根据所述分区定义判断分区类型;对不同的分区类型分别采用不同的方法计算分区范围,得到对应的多个分区。5.根据权利要求4所述的对非分区表进行分区并行读取的方法,其特征在于,对于范围分区,计算分区范围的过程具体为:判断分区列类型,如果分区列类型为日期时间型则转换为数值型;根据用户给出的希望的分区数,确定最终分区数量;根据用户给出的分区列的最大值估计值、...

【专利技术属性】
技术研发人员:付铨梅纲高东升
申请(专利权)人:武汉达梦数据库有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1