[发明专利]一种对非分区表进行分区并行读取的方法及装置有效
申请号: | 201910553480.7 | 申请日: | 2019-06-25 |
公开(公告)号: | CN110334096B | 公开(公告)日: | 2021-09-10 |
发明(设计)人: | 梅纲;高东升 | 申请(专利权)人: | 武汉达梦数据库股份有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/2453;G06F16/28 |
代理公司: | 深圳市六加知识产权代理有限公司 44372 | 代理人: | 向彬 |
地址: | 430000 湖北省武汉市东湖新技术开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分区表 进行 分区 并行 读取 方法 装置 | ||
1.一种对非分区表进行分区并行读取的方法,其特征在于,包括:
对数据库中的非分区表进行分区定义;
基于所述分区定义对非分区表进行分区,得到对应的多个分区;
根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取;
所述对数据库中的非分区表进行分区定义具体为:
在数据集成工具内,根据非分区表的数据特征从数据库中选择合适的分区列,使得非分区表中的数据能够均匀分布到各个分区;
判断选择的各分区列的类型,并根据分区列类型确定需要定义的分区类型;
用户根据需要定义的分区类型给出所需的相关参数,完成相应的分区定义;
在进行分区定义时,支持的分区列类型包括数值型、日期时间型以及字符型,支持的分区类型包括范围分区和枚举分区;
当分区列类型为数值型或者日期时间型时,使用范围分区;当分区列为字符型时,使用枚举分区;
当定义范围分区时,用户给出的相关参数包括:分区列名称、分区列的最小值估计值、最大值估计值以及希望的分区数;当定义枚举分区时,用户给出的相关参数包括:分区列名称和每个可能的枚举值;
所述基于所述分区定义对非分区表进行分区,得到对应的多个分区,具体包括:
读取所述分区定义,并根据所述分区定义判断分区类型;
对不同的分区类型分别采用不同的方法计算分区范围,得到对应的多个分区;
对于范围分区,计算分区范围的过程具体为:
判断分区列类型,如果分区列类型为日期时间型则转换为数值型;
根据用户给出的希望的分区数,确定最终分区数量;
根据用户给出的分区列的最大值估计值、最小值估计值及确定的最终分区数量,计算每个分区的分区列的起始值和结束值;
所述根据用户给出的希望的分区数,确定最终分区数量具体为:
在用户给出的希望的分区数基础上加2,作为最终分区数量;其中,额外增加的2个分区分别为:一个包含最小可能值的分区和一个包含最大可能值的分区;其中,对于用户希望的分区,每个分区的正常宽度应为(最大值估计值-最小值估计值)/用户希望的分区。
2.根据权利要求1所述的对非分区表进行分区并行读取的方法,其特征在于,对于枚举分区,计算分区范围的过程具体为:
根据用户给出的每个可能的枚举值,确定每个分区的分区列的枚举值;其中,每个枚举值为一个分区,最终分区数量等于枚举值的个数。
3.根据权利要求1所述的对非分区表进行分区并行读取的方法,其特征在于,所述根据每个分区的属性动态生成分区查询语句,并将多个分区分配给多个工作线程读取,具体包括:
将得到的多个分区平均分配给线程池中的多个工作线程执行;
各工作线程根据分配的分区的属性,动态生成分区SQL查询语句;
各工作线程执行对应的SQL查询,并输出查询结果。
4.根据权利要求1-3任一所述的对非分区表进行分区并行读取的方法,其特征在于,在所述对数据库中的非分区表进行分区定义之前,所述方法还包括:
当在数据库中查询的源表为非分区表时,计算对应非分区表的数据量,并将所述数据量与预设阈值进行比较;
其中,当所述数据量大于所述预设阈值时,对该非分区表进行分区定义;当所述数据量小于等于所述预设阈值时,直接对该非分区表进行数据查询读取。
5.一种对非分区表进行分区并行读取的装置,其特征在于,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-4任一所述的对非分区表进行分区并行读取的方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉达梦数据库股份有限公司,未经武汉达梦数据库股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910553480.7/1.html,转载请声明来源钻瓜专利网。