一种面向海量数据高效取差集的方法

文档序号:9350016阅读:517来源:国知局
一种面向海量数据高效取差集的方法
【专利说明】一种面向海量数据高效取差集的方法技术背景
[0001]本发明涉及一种面向海量数据高效取差集的方法。
【背景技术】
[0002]
[0003]许多应用场景需要对两个数据集进行对比,去除数据重合部分,取其差集。目前很多做法都是直接循环对比两个数据集,判断其差集是否存在。但在大数据应用环境下,面对海量数据,采用该传统方法有可能出现内存溢出、执行时间长、效率低等问题,无法满足业务需求。

【发明内容】

[0004]本发明的目的在于提供一种面向海量数据高效取差集的方法,在海量数据环境下,能高效获取差集结果,缩短执行时间,及时响应用户操作。
[0005]本发明一种面向海量数据高效取差集实现方法,包括如下步骤:
[0006]步骤1、数据存储及历史数据形成阶段
[0007]包括若干个数据存储区,每个数据存储区下根据时间轴分类或共性条件设置多个分核,每个分核下根据时间轴分类或共性条件设置多个分片,分核数量及分片数量可根据数据量进行水平扩展,将海量数据根据时间轴分类或共性条件进行分核及分片存储形成历史数据;
[0008]步骤2、形成源数据位数组集合与目标数据位数组集合阶段
[0009]根据源数据和目标数据查询条件分别到历史数据相应的分片获取数据组成源数据集合和目标数据集合;
[0010]对获取的源数据集合与目标数据集合分别进行去重处理,去重后数据的匹配字段采用哈希函数映射到位阵列进行存储,分别提取后续会用于匹配的关键字段进行存储形成位数组集合,其中,源数据位数组集合用来存储源数据集合的关键字段元素,目标数据位数组集合用来存储目标数据集合的关键字段;
[0011]步骤3、源数据位数组集合与目标数据位数组集合进行位索引匹配取差集阶段
[0012]循环源数据位数组集合中的元素,通过L个哈希映射函数得到L个值,匹配到目标数据位数组集合中,判断目标数据位数组是否都为1,若全为1,则说明源数据位数组集合中的该元素在目标数据位数组集合中,否则说明源数据位数组集合中的该元素不在目标数据位数组集合中,将目标数据位数组集合中的该元素放到另外一个差集集合中,循环匹配源数据位数组集合所有元素后,得到的差集集合就是源数据集合与目标数据集合的差集,从而实现数据快速匹配取差集。
[0013]本发明将存储机制与索引机制相结合,实现高效取差集;在进行数据存储时就已经对存储位置进行分核分片规范,减少了获取的数据执行时间,提高了执行效率,同时在数据量不断增大的情况下,可通过增加分核数与分片数进行水平扩展,不会因为数据量增大而在取数据时耗费太多查询时间;而在取差集时,源数据集合与目标数据集合采用位数组的存储模式,存储的都是去重后数据的关键匹配元素,避免了全元素存储,减少了存储空间,避免因数据量过大而导致内存溢出,在取差集匹配时,采用的是基于哈希表的位索引模式,提高了匹配效率,在取差集数据量越大情况下,越能体现性能方面的优势。
【附图说明】
[0014]图1为本发明中历史数据存储的流程图;
[0015]图2为本发明中取差集的流程图。
[0016]以下结合附图和具体实施例对本发明作进一步详述。
【具体实施方式】
[0017]本发明一种面向海量数据高效取差集实现方法,包括如下步骤:
[0018]步骤1、数据存储及历史数据形成阶段
[0019]如图1所示,本发明包括若干个数据存储区,每个数据存储区下根据时间轴分类或共性条件设置多个分核,每个分核下根据时间轴分类或共性条件设置多个分片,分核数量及分片数量可根据数据量进行水平扩展,将海量数据根据时间轴分类或共性条件进行分核及分片存储形成历史数据,能减少每个数据存储区的数据量,方便快速获取相应的数据,避免获取大量数据时出现查询瓶颈;
[0020]步骤2、形成源数据位数组集合与目标数据位数组集合阶段
[0021]如图2所示,根据源数据查询条件到历史数据相应的分片获取数据组成源数据集合,根据目标数据查询条件到历史数据相应的分片获取数据组成目标数据集合;
[0022]获取源数据集合与目标数据集合后,对获取的数据进行去重处理,分别提取关键字段进行存储,采用位数组存储的方式形成两个位数组集合,一个用来存储源数据集合的关键字段元素,另外一个用来存储目标数据集合的关键字段;所述去重后数据的匹配字段采用哈希函数映射到位阵列进行存储,形成位数组集合,在初始状态下,数组中所有位都被置为O,在载入元素时,将对应位置为I,例如,数据的元素集合为N = In1, n2,…,!!丄则通过L个哈希映射函数{f\,f2,…,f J,将数据的元素集合N中的每个元素Iij (I ^ j ^ η)映射为L个值fe, g2,…,gj,然后再将位数组array中相对应的arrayligj, array [g2],…,array [gL]置为I ;在组装位数组集合时,采用哈希表数据结构存储方式,只存储后续会用于匹配的元素字段,源数据的组装方式与目标数据一致;
[0023]步骤3、源数据位数组集合与目标数据位数组集合进行位索引匹配取差集阶段
[0024]源数据位数组集合中的元素,通过L个哈希映射函数R1, f2,…,fj得到L个值{gl,g2,一,gJ,匹配到目标数据位数组集合中,判断目标数据位数组array [gj, array [g2],..., array [gL]是否都为1,若全为1,则说明源数据位数组集合中的该元素在目标数据位数组集合中,否则说明源数据位数组集合中的该元素不在目标数据位数组集合中,将目标数据位数组集合中的该元素放到另外一个差集集合中,循环匹配源数据位数组集合所有元素后,得到的差集集合就是源数据集合与目标数据集合的差集,从而实现数据快速匹配取差集。
[0025]本发明的重点在于:将存储机制与索引机制相结合,实现高效取差集;在进行数据存储时就已经对存储位置进行分核分片规范,减少了获取的数据执行时间,提高了执行效率;而在取差集时,源数据集合与目标数据集合采用位数组的存储模式,存储的都是去重后数据的关键匹配元素,避免了全元素存储,减少了存储空间,避免因数据量过大而导致内存溢出,在取差集匹配时,采用的是基于哈希表的位索引模式,提高了匹配效率。
[0026]以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【主权项】
1.一种面向海量数据高效取差集实现方法,其特征在于包括如下步骤: 步骤1、数据存储及历史数据形成阶段 包括若干个数据存储区,每个数据存储区下根据时间轴分类或共性条件设置多个分核,每个分核下根据时间轴分类或共性条件设置多个分片,分核数量及分片数量可根据数据量进行水平扩展,将海量数据根据时间轴分类或共性条件进行分核及分片存储形成历史数据; 步骤2、形成源数据位数组集合与目标数据位数组集合阶段 根据源数据和目标数据查询条件分别到历史数据相应的分片获取数据组成源数据集合和目标数据集合; 对获取的源数据集合与目标数据集合分别进行去重处理,去重后数据的匹配字段采用哈希函数映射到位阵列进行存储,分别提取后续会用于匹配的关键字段进行存储形成位数组集合,其中,源数据位数组集合用来存储源数据集合的关键字段元素,目标数据位数组集合用来存储目标数据集合的关键字段; 步骤3、源数据位数组集合与目标数据位数组集合进行位索引匹配取差集阶段 循环源数据位数组集合中的元素,通过L个哈希映射函数得到L个值,匹配到目标数据位数组集合中,判断目标数据位数组是否都为1,若全为1,则说明源数据位数组集合中的该元素在目标数据位数组集合中,否则说明源数据位数组集合中的该元素不在目标数据位数组集合中,将目标数据位数组集合中的该元素放到另外一个差集集合中,循环匹配源数据位数组集合所有元素后,得到的差集集合就是源数据集合与目标数据集合的差集,从而实现数据快速匹配取差集。
【专利摘要】本发明一种面向海量数据高效取差集实现方法,将存储机制与索引机制相结合,实现高效取差集;在进行数据存储时就已经对存储位置进行分核分片规范,减少了获取的数据执行时间,提高了执行效率,同时在数据量不断增大的情况下,可通过增加分核数与分片数进行水平扩展,不会因为数据量增大而在取数据时耗费太多查询时间;而在取差集时,源数据集合与目标数据集合采用位数组的存储模式,存储的都是去重后数据的关键匹配元素,避免了全元素存储,减少了存储空间,避免因数据量过大而导致内存溢出,在取差集匹配时,采用的是基于哈希表的位索引模式,提高了匹配效率,在取差集数据量越大情况下,越能体现性能方面的优势。
【IPC分类】G06F17/30
【公开号】CN105069084
【申请号】CN201510464150
【发明人】周华, 陈光淙, 许华堂
【申请人】南威软件股份有限公司
【公开日】2015年11月18日
【申请日】2015年7月31日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1