一种用归并算法计算一对一join、一对多join的方法技术

技术编号:17304576 阅读:38 留言:0更新日期:2018-02-18 22:44
本发明专利技术提供了一种用归并算法计算一对一join、一对多join的方法。数据量非常大内存装不下的互相关联数据集A和B,特点是关联键是事先知道并且确定的。对在外存中的数据集A和B进行如下准备工作,同维数据集关系按照它们的主键排序,主子数据集关系主数据集A按照它的主键排序,子数据集B按关联主键的键排序或者全部和主键有关系的键排序,把这些准备计算join的历史数据集全部保存好;用归并算法计算一对一join同维数据集A和B时,数据集A和B只要各自遍历一次,然后就可以在合并数据集中引用记录了。

A method of calculating one to one join, one to many join by merging algorithm

The invention provides a method for calculating one to one join and one to many join by a merging algorithm. The interrelated data sets, A and B, which are very large in memory, are characterized by the prior knowledge and determination of the association keys. In the disk of the A data set and B data set with the following preparations, ordering them according to the primary key, master data set between main data sets A sorted according to its primary key, sorting data set B according to the related primary key order or all have a relationship with the primary key, the historical data of these preparations the calculation of join set to save all the good; one dimensional calculation of join A data set and B data set by merging algorithm, A and B as long as their traversal time, then you can focus on references in the combined data records.

【技术实现步骤摘要】
一种用归并算法计算一对一join、一对多join的方法
本专利技术涉及计算一对一join、一对多join,更具体地来说,特别涉及一种用归并算法计算一对一join、一对多join的方法。
技术介绍
有时为了得到完整的结果,我们需要从两个或更多的数据集中获取结果。我们就需要执行join计算。一对一join的关系是两个数据集之间的一种关系,该关系中第一个数据集中的单个行与第二个数据集中的单个行相关。如果这两个数据集关联的键都为主键时,称这两个数据集为同维数据集。一对多join的关系是两个数据集之间的一种关系,该关系中第一个数据集中的单个行与第二个数据集中的一个或多个行相关,但第二个数据集中的一个行只可以与第一个数据集中的一个行相关。如果在应用中,某个数据集包含了一片或者多片区域,每一片区域都针对同一个对象,但是各区域又各自展示不同的主题,像这样的一对多join关系我们称之为主子数据集。其中每一小片区域称为子数据集,子数据集构成的数据集整体称为主数据集。主子数据集的特点是子数据集的关联键是主数据集关联主键的一部分。数据集可通过键将彼此联系起来。主键(PrimaryKey)是一个列,在这个列中的每一行的键值都是唯一的。在数据集中,每个主键的键值都是唯一的。这样做的目的是在不重复每个数据集中的所有数据的情况下,把数据集间的数据交叉捆绑在一起。hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的键值(又叫做预映射,pre-image),通过散列算法,变换成固定长度的hash值。这种转换是一种压缩映射,也就是,hash值的空间通常远小于键值的空间,不同的键值可能会散列成相同的hash值,所以不可能从hash值来唯一的确定键值。简单的说就是一种将任意长度的键值压缩到某一固定长度的hash值的函数。目前现有的大数据量一对一join、一对多join的外存计算技术有以下两种:一种采用了hash方法,把外存中的数据集A和B进行关联的键值转换成hash值,外存计算的实质运算只能内存做,因为针对的是大数据量的计算,数据集A和B的数据量比较大,内存放不下数据集A和B,所以把数据集A和B分成若干个内存能放下的小段,因为计算的是join,所以hash方法必须保证让数据集A和B中关联的记录分到同一段中,相同键值的hash值是相同的,因为相同的hash值被分到同一段了,所以相同的键值也在同一段中。如果数据集A和B中的某个分段太大了内存装不下,就只能二次hash再分更小的段;但是hash函数也有一些缺点,这个缺点是hash数据集不可避免的,即冲突现象:对不同的关键字可能得到同一hash地址hash算法的另一个缺点是,用hash方法每次都读取一点点数据然后写出去,而且写的动作比读的动作慢好几倍,还会导致hash结果非常碎片化,很难用了。另一种是用归并算法计算,归并算法比hash算法效率高很多,减少了大量硬盘IO的时间;但是归并算法的要求是两个数据集里面的数据都是有序的,缺点是实施条件高。这两种对应关系(一对一join同维数据集、一对多join主子数据集)的特点是计算时永远只用到这两个关联键,不会用到别的键,关联键是事先知道并且确定的。传统的办法还是hash分段或者归并算法(只有确定的知道数据集有序时才会采用。无序的数据集实际上很少采用,因为归并算法计算前需要对无序的数据集进行排序,而排序的成本比hash分段的成本高很多),为什么不在保存数据集的时候保存数据集的次序呢,因为关系数据库是无序集合体系的,理论上不能保存数据集的次序,很难利用这一特点。这样计算的效率比较低或者实施条件高,如何利用关联键是事先知道并且确定的这个特点来提升一对一join同维数据集、一对多join主子数据集的计算效率或者降低实施条件是目前需要解决的问题。针对上述方法的问题本专利技术提供了一种用归并算法计算一对一join、一对多join的方法。
技术实现思路
为了克服前述问题,本专利技术的目的在于提供一种用归并算法计算一对一join、一对多join的方法。一种用归并算法计算一对一join、一对多join的方法,实施条件为:数据量非常大内存装不下的互相关联数据集A和B,特点是关联键是事先知道并且确定的(此专利技术的必要条件)。如果数据集A中的主键对应数据集B中的主键,则A和B是一对一join同维数据集;如果数据集A中的主键对应子数据集B中的关联键,(子数据集B中的关联键是主数据集A中的主键一部分)则A和B是一对多join主子数据集。使用步骤为:1.对在外存中的数据集A和B进行如下准备工作,同维数据集关系按照它们的主键排序,主子数据集关系主数据集A按照它的主键排序,子数据集B按关联主键的键排序或者全部和主键有关系的键排序(关联对应的键放到前边),把这些准备计算join的历史数据集全部保存好;(这是一次性准备工作,以后A和B再计算join时就不需要做这步准备了。)2.用归并算法计算一对一join同维数据集A和B时,数据集A和B只要各自遍历一次,然后就可以在合并数据集中引用记录了。计算一对多join主子数据集A和B的时候,原理和方法同上步骤2。就是把子数据集主键换成子数据集对应主数据集的关联键。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,实施条件为一对一join同维数据集、一对多join主子数据集,关联键是事先知道并且确定的。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,把准备用来计算一对一join、一对多join的历史数据集排序保存准备好。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,步骤1这是一次性准备工作,以后再计算这一对一join、一对多join数据集时就不需要做这步准备了。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,数据集一次排序保存后可多次用归并算法计算。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,用归并算法计算一对多join主子数据集的时候,方法和原理同计算一对一join同维数据集一样,只不过就是把子数据集主键换成子数据集对应主数据集的关联键。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,用归并算法计算一对一join或者一对多join时,优势是只需要很小的内存就可以完成大数据的计算。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,用归并算法计算一对一join或者一对多join时,同以前用hash方法解决同样的问题比,减少了大量硬盘IO的时间。如上所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,所述方法适用于所有的系统、平台、软件、语言中。以上只是一个理论上的描述,实际实现过程中还会有各种优化的可能,但基本原理不会改变。本领域的技术人员可以对本专利技术进行各种改动和变型而不脱离本专利技术的保护范围。本专利技术的有益效果在数据量大内存不能装下所需要计算的数据集时,事先对无序的数据集里的数据进行排序,然后就可以用归并算法计算一对一join、一对多join了,归并算法的优势是可以用很小的内存完成大数据集的计算。同以前用hash方本文档来自技高网
...
一种用归并算法计算一对一join、一对多join的方法

【技术保护点】
一种用归并算法计算一对一join、一对多join的方法,步骤如下:a.对在外存中的数据集A和B进行如下准备工作,同维数据集关系按照它们的主键排序,主子数据集关系主数据集A按照它的主键排序,子数据集B按关联主键的键排序或者全部和主键有关系的键排序(关联对应的键放到前边),把这些准备计算join的历史数据集全部保存好;(这是一次性准备工作,以后A和B再计算join时就不需要做这步准备了。)b.用归并算法计算一对一join同维数据集A和B时,数据集A和B只要各自遍历一次,然后就可以在合并数据集中引用记录了。计算一对多join主子数据集A和B的时候,原理和方法同上步骤2。就是把子数据集主键换成子数据集对应主数据集的关联键。

【技术特征摘要】
1.一种用归并算法计算一对一join、一对多join的方法,步骤如下:a.对在外存中的数据集A和B进行如下准备工作,同维数据集关系按照它们的主键排序,主子数据集关系主数据集A按照它的主键排序,子数据集B按关联主键的键排序或者全部和主键有关系的键排序(关联对应的键放到前边),把这些准备计算join的历史数据集全部保存好;(这是一次性准备工作,以后A和B再计算join时就不需要做这步准备了。)b.用归并算法计算一对一join同维数据集A和B时,数据集A和B只要各自遍历一次,然后就可以在合并数据集中引用记录了。计算一对多join主子数据集A和B的时候,原理和方法同上步骤2。就是把子数据集主键换成子数据集对应主数据集的关联键。2.如权利要求1所述的一种用归并算法计算一对一join、一对多join的方法,其特征在于,数据量非常大内存装不下的互相关联数据集A和B,特点是关联键是事先知道并且确定的(此...

【专利技术属性】
技术研发人员:蒋步星
申请(专利权)人:北京润乾信息系统技术有限公司
类型:发明
国别省市:北京,11

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

1