一种均匀切分数据库表数据的方法及计算机设备技术

技术编号:18592122 阅读:27 留言:0更新日期:2018-08-04 20:02
本发明专利技术提供一种均匀切分数据库表数据的方法,通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;设定预分区数M;读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间;本发明专利技术还提供一种计算机设备,以较低算法复杂度和数据库开销进行数据切分,较好地解决了数据库负担和快速分区的问题。

A method of evenly dividing table data of database and computer equipment

The invention provides a method of uniform segmentation of database table data by scanning the table that is required to split the list of columns, column types and index status in the table; select a column with an integer and no repeat value. If the column is not found, a column of self increasing type is added in the table, and the column is a cut. A column is chosen arbitrarily, and the number of pre partition numbers M is set, all the values of the cut and cut columns are read to the array, and the M partition interval of the array is calculated by the location algorithm, and the M numerical interval is obtained. The invention also provides a computer device to cut the data with a lower algorithm complexity and the database overhead. The problem of database loading and fast partition is solved.

【技术实现步骤摘要】
一种均匀切分数据库表数据的方法及计算机设备
本专利技术涉及一种均匀切分数据库表数据的方法及计算机设备。
技术介绍
数据分区是分布式计算的重要内容:要求数据被比较均匀地分成多份再分配合适的计算资源,并且分区数通常是动态变化(如当前剩余的计算资源量、用户所能支配的资源量)。传统数据库表中数据一般未被分区(即使被分区也不是实际计算时所需要的分区数),提交计算任务时再进行分区,通常的做法要求扫描切分列的全部数据,加重数据库负担,并且由于切分列数值分布不均匀,简单的算法无法实施,复杂算法的实时性将受极大影响。
技术实现思路
本专利技术要解决的技术问题,在于提供一种均匀切分数据库表数据的方法及计算机设备,以较低算法复杂度和数据库开销进行数据切分,较好地解决了数据库负担和快速分区的问题。本专利技术之一是这样实现的:一种均匀切分数据库表数据的方法,包括:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。进一步地,还包括步骤5、将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用。进一步地,所述步骤5进一步具体为:将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用;从应用程序获取将要分区的表以及实际分区数K,获取M个数值区间,将M个数值区间生成K个数值分区,并将K个数值分区返回给应用程序。本专利技术之二是这样实现的:一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。进一步地,还包括步骤5、将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用。进一步地,所述步骤5进一步具体为:将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用;从应用程序获取将要分区的表以及实际分区数K,获取M个数值区间,将M个数值区间生成K个数值分区,并将K个数值分区返回给应用程序。本专利技术具有如下优点:1)如果使用简单算法,由于“跳跃”现象导致切分不均匀,这将导致分布式计算某个计算节点的“崩溃”(处理太多数据而资源不足)或“木桶”效应(等待最慢的节点处理完毕);本专利技术算法可以避免不均匀问题。2)如果直接使用较为复杂的算法,当计算任务很多时,表记录数很大或者表数目很多时,会对数据库造成很大压力;本专利技术预计算阶段请求数据库频繁程度很低不会对数据库造成压力。3)此外,直接采用复杂算法还会对实时性响应造成很大影响;本专利技术实时计算阶段没有数据库开销,且运行简单算法可以满足实时性。附图说明下面参照附图结合实施例对本专利技术作进一步的说明。图1为本专利技术方法执行流程图。具体实施方式本专利技术均匀切分数据库表数据的方法,包括:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。步骤5、将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用;从应用程序获取将要分区的表以及实际分区数K,获取M个数值区间,将M个数值区间生成K个数值分区,并将K个数值分区返回给应用程序。本专利技术计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。步骤5、将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用;从应用程序获取将要分区的表以及实际分区数K,获取M个数值区间,将M个数值区间生成K个数值分区,并将K个数值分区返回给应用程序。本专利技术实现的方法分两步走,预计算阶段扫描切分列全部数据,计算M分位点。实时计算部分再根据M分位点,实时算出分布式计算所需的K分位点。应用程序将K分位点转为K个数据库范围查询请求数据,从而将数据快速且比较均匀地分成K份。如图1所示,方案结构:离线切分系统,实时切分系统,应用程序,元数据系统主要步骤:A:预计算阶段(离线切分系统实施)1)离线系统扫描数据库元数据系统,获取将要切分表的的列名、列类型和建索引状况,元数据库存储了所有已建索引的信息,包含字段是否被索引;2)从1)所获取的列中挑选类型为整型(int)且无重复值的列。如果符合这类条件的列大于等于1列,则任取一个列作为切分列(假设为field_A)。并获取该列的最大值记为idmax和最小值记为idmin,(分区实质上是将不同记录(行)分成几组,无重复值的int类型的列很自然地起到“行号”的作用,虽然这种“行号”可能不连续。String、date等其他类型要起“行号”作用首先要转成int,其次还不能有重复值,很不便。对Int且无重复值的列建索引,在做区间查询时比较快)。注:为后文描述方便,该列的任意一个值记为id。3)如果2)找不到相应列,则在该表新添加一个自增类型(AUTO_INCREMENT)的列,起到“行号”的作用。4)确定预分区数M,M可人为给定也可预先设定(数量级一般为104-105)注:M值远大于实际需要的分区数K(K数量级101~103),但又远小于表的总记录数N(数量级为107~109或更大)。K受现实计算资源约束,因此不可能太大。而且过大还容易造成每个分区内数据太少,无法发挥批处理的优势。5)确定预分区数M,M可人为给定也可预先设定(数量级一般为104-105)注:M值远大于实际需要的分区数K(K数量级101~103),但又远小于表的总记录数N(数量级为107~109或更大)。K受现实计算资源约束,因此不可能太大。而且过大还容易造成每个分区内数据太少,无法发挥批处理的优势。5)读取field_A列内全部数值到数组,调用分位点算法(记为alg_Q),计算该列的M个分区区间,得到M个数值区间I1=[min1,max1],…IM=[minM,maxM],满足如下要求:i)每个区间内id值满足:区间最小值(如minM)≤id≤区间最大值(如maxM);ii)每个区间数目近似相等(误差可控制在101~102内);iii)min1=idmin(所有id的最小值),maxM=idmax(所有id本文档来自技高网...

【技术保护点】
1.一种均匀切分数据库表数据的方法,其特征在于:包括:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。

【技术特征摘要】
1.一种均匀切分数据库表数据的方法,其特征在于:包括:步骤1、通过扫描所需切分的表,获取表中的列明、列类型以及索引状况;步骤2、挑选出类型为整型且无重复值的列,若找不到对应列,则在该表中新添加一自增类型的列,该列作为切分列;否则任意选取一列作为切分列;步骤3、设定预分区数M;步骤4、读取切分列全部数值至数组,通过分位点算法计算该数组的M个分区区间,得到M个数值区间。2.根据权利要求1所述的一种均匀切分数据库表数据的方法,其特征在于:还包括步骤5、将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用。3.根据权利要求2所述的一种均匀切分数据库表数据的方法,其特征在于:所述步骤5进一步具体为:将所述M个数值区间存入数据库或内存,并对外暴露服务接口,用于调用;从应用程序获取将要分区的表以及实际分区数K,获取M个数值区间,将M个数值区间生成K个数值分区,并将K个数值分区返回给应用程序。4.一种计算机设备,包括...

【专利技术属性】
技术研发人员:李昭阳
申请(专利权)人:福建星瑞格软件有限公司
类型:发明
国别省市:福建,35

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

1