一种社保大数据OLAP预处理方法及在线分析查询方法与流程

文档序号:11919129阅读:367来源:国知局
本发明涉及大数据处理
技术领域
:,特别涉及一种社保大数据OLAP预处理方法及在线分析查询方法。
背景技术
::随着信息数据时代的来临,政府、企业等机构累积产生了大量社保数据,这些数据蕴含着大量的信息,但是需要合理的挖掘才能形成有用的可供处理的信息,以便于对未来进行预测和适时地做出决策。许多企业级别的系统能够达到TB、PB的数据量,而对于分析决策者而言,需要从中提取出可供参考的信息。目前通用的做法是,使用OLAP(OnlineAnalyticalProcessing,在线分析处理)数据仓库,将历史数据经过一系列的提取、清理、装载等步骤存放到数据变动相对较小的数据仓库中,再进行在线分析处理OLAP,就能得到相关的信息以供决策。我国的社保信息化管理已经经过多年的发展完善,但当下对五种社保信息系统的管理,仍然很难独立的进行有效的处理,更不用说直接进行操作。在线分析处理(OLAP)可以将原始数据转化为贴近用户所理解的业务维度,提供从各种角度(切片、聚集等)观察信息的技术,便于分析管理人员快速、一致、交互地访问数据。OLAP的功能特点是提供动态多维的查询、分析、整合数据,支持多用户的分析活动,包括各个维度的计算和查询应用,通过多层次结构进行趋势分析,进行子集切片细致查看,钻取到更深的层次,旋转到新的维度进行可见的区域比较等。数据分析应用程序经常对聚集在不同的层面上的数据挖掘一些非常理的模式。对于这种问题,传统方法是使用GROUPBY操作,但它已被证明不适合大量的数据分析应用。所以在1997年提出了一个新的替代它的方法,它的名字是立方体(CUBE),并已成为OLAP系统中一个非常热门的研究领域。针对OLAP的查询效率问题,经过了将近20年的发展,已经形成了一套完整的理论和方法,主要就是使用CUBE来提升查询的速度。对海量社保数据的多维查询分析,查询速度是评价系统性能的关键因素。随着数据立方体(CUBE)在OLAP中的作用日渐重要,需要一种更为高效、快速的算法来计算和存储CUBE。然而,已知的CUBE算法仍然存在很多缺点,如查询时的计算,长方体和立方体的具体化和压缩等。针对多维立方体查询的优化,有几个比较常见的方法:CUBE压缩,局部物化等。局部物化是一种典型的用空间换取时间的方法,通过提前建立CUBE达到减少表连接消耗时间,当涉及到多维的社保数据,为每一列建立视图将会带来时间信息、地理信息等方面的巨大冗余,因此这种方法是不尽如人意的,同时CUBE压缩同样存在在高维度下效率低下的情况。技术实现要素:本发明的主要目的在于克服现有技术的缺点与不足,提供一种社保大数据OLAP预处理方法,能够有效的表达多维查询的数据模型的结果并减少其所占用的存储空间。本发明的另一目的在于提供一种基于上述预处理方法的在线分析查询方法,能够有效的表达多维查询的数据模型的结果并减少其所占用的存储空间。本发明的目的通过以下的技术方案实现:一种社保大数据OLAP预处理方法,包括以下步骤:S1、从原始数据库提取数据构建数据仓库;S2、从数据仓库提取单维数据;S3、对单维数据以及单维数据的组合构建从属性到ID的反向映射,并利用反向映射构建键值对数据仓库;S4、筛选合适的数据属性的组合,保证对多维属性的组合可以得到多维数据聚合的结果;S5、由数据属性的组合得到不同的分割,通过各种不同的分割组合来去除重复冗余的分割,从而保证用最少的分割达到所有的分割组合,针对社保数据的独特性并结合实际情况,构造一维的CUBE,完成预处理过程。优选的,不同属性元素对ID的反向映射,通过键值对数据库LMDB来进行存储。优选的,根据需求建立一种新的表示分割的数据结构,分为两部分,第一部分表示它的ID,即它所在原数据库中的ID值;第二部分表示它所属于的类的ID,即把ID分割成许多子集,每个子集的ID。进一步的,利用Boost库中的多重索引结构重新封装,得到一个可以根据ID或子集ID索引的新的数据结构。优选的,步骤S5中一维的CUBE只存储所有的一维分割,在查询时,对一维分割进行实时的组合即可达到所有的分割组合;一维的分割指的是单独属性的分割。一种基于上述预处理方法的在线分析查询方法,包括以下步骤:预处理:S1、从原始数据库提取数据构建数据仓库;S2、从数据仓库提取单维数据;S3、对单维数据以及单维数据的组合构建从属性到ID的反向映射,并利用反向映射构建键值对数据仓库;S4、筛选合适的数据属性的组合,保证对多维属性的组合可以得到多维数据聚合的结果;S5、由数据属性的组合得到不同的分割,通过各种不同的分割组合来去除重复冗余的分割,从而保证用最少的分割达到所有的分割组合,针对社保数据的独特性并结合实际情况,构造CUBE,完成预处理过程;查询步骤:S7、用户输入查询需求;S8、构建一个通用的SQL查询框架,将传统的SQL语言解析,使之可用于本方法的查询,以实现对底层的封装;S9、判断查询需求是否合法,结论为否则提醒用户重新输入查询需求,结论为是则继续步骤S10;S10、通过调用键值对数据仓库中的反向映射,分析属性到ID的数据,通过对数据的组合和分割处理,生成分割的交和并的算法;S11、从一维的CUBE得到单维数据并根据S10中所得的算法进行聚合,生成查询结果并返回。本发明与现有技术相比,具有如下优点和有益效果:本发明以一种反向的思维对传统数据库进行处理,得到一个属性对ID的键值对数据库,经过严格的理论证明,形成了一个可以基于此键值对数据库的查询方法。此方法克服了传统CUBE算法空间效率低下的问题,以一种全新的思维构造了一个基于分割的数据仓库系统,并取得了不错的时间效率。本方法可以满足日益提高的OLAP查询的要求,得到了一个空间消耗低、并满足实时性的OLAP系统。附图说明图1为实施例中数据预处理流程图;图2为实施例中在线分析查询方法流程图;图3为实施例中查询过程中读取数据时间与聚合时间比较图;图4为实施例中查询的行数与总时间的对比图;图5为本发明实施例模型与一个商用数据库(postgreSQL)的时间比较;图6为本发明实施例模型在数据集SSB中与一个商用数据库(postgreSQL)的时间比较。具体实施方式下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。本实施例通过OLAP查询处理引擎和一个合理的数学的证明,提出了模型的广义的元组通过分割的对应元组。然后,可以证明本算法可以包含或者推导出所有数据立方体。然后,通过CUBE的通用查询模型,可以进行任意的分割的计算,从而实现了聚集的算法。最终,通过那些单个的数据分割结构,可以动态的提取所有聚集的组合,从中查询出任何需要的结果。本发明的算法的核心特点可以概括如下:{查询结果}=∧∨{所有提取得到的一维键值对数据,即所有的单维分割}一种社保大数据OLAP预处理方法,如图1,包括以下步骤:S1、从原始数据库抽取出所需的数据,经过抽取、转换、加载到数据仓库中去;S2、从数据仓库提取单维数据;S3、针对单维数据以及单维数据之间的组合,构建从属性到ID的反向映射,利用反向映射构建键值对数据库(使用LMDB作为Key/Value数据库进行存储),作为社保数据统计分析的存储空间;S4、筛选合适的数据属性的组合,保证对多维属性的组合可以得到多维数据聚合的结果;S5、由数据属性的组合得到不同的分割,通过各种不同的组合来去除重复冗余的分割,从而保证用最少的分割达到所有的分割组合,针对社保数据的独特性并结合实际情况,构造一维的CUBE,完成预处理过程。一种基于上述预处理方法的在线分析查询方法,如图2,包括以下步骤:预处理:S1、从原始数据库提取数据构建数据仓库;S2、从数据仓库提取单维数据;S3、对单维数据以及单维数据的组合构建从属性到ID的反向映射,并利用反向映射构建键值对数据仓库;S4、筛选合适的数据属性的组合,保证对多维属性的组合可以得到多维数据聚合的结果;S5、由数据属性的组合得到不同的分割,通过各种不同的分割组合来去除重复冗余的分割,从而保证用最少的分割达到所有的分割组合,针对社保数据的独特性并结合实际情况,构造一维的CUBE,完成预处理过程;查询步骤:S7、用户输入查询需求;S8、构建一个通用的SQL查询框架,将传统的SQL语言解析并使之可用于本方法的模型(使用C++编写的简单查询器),以实现对底层的封装;S9、判断查询需求是否合法,结论为否则提醒用户重新输入查询需求,结论为是则继续步骤S10;S10、通过调用键值对数据仓库中的反向映射,分析属性到ID的数据,通过对数据的组合和分割处理,生成分割的交和并的算法;S11、从一维的CUBE得到单维数据并根据S10中所得的算法进行聚合,生成查询结果并返回。为了实现上述方法,建立一种新的表示分割的数据结构,分为两部分,第一部分表示它的ID,即它所在原数据库中的ID值;第二部分表示它所属于的类的ID,即把ID分割成许多子集,每个子集的ID。这里是对已经处理过的键值对数据库又进行了一次排列,例:P(p)=12|34|5,那么子集|12|可以被编成序号1,子集|34|是2,子集|5|就是3,这三部分就是对属性P的分割后又形成的键值对数据库的三个条目。进一步利用Boost库中的多重索引结构重新封装,得到一个可以根据ID或子集ID索引的新的数据结构。该方法基于一种新的CUBE底层模型,将传统的CUBE的存储模式进行改进,摒弃了之前将全部CUBE实例化的方法,而采用一种部分实例化的CUBE并且在运行时进行实时的聚合。从而形成了一种拥有极高空间效率的CUBE模型。本模型的优点是以少量的数据存储进行实时的OLAP查询。(1)反向映射的概念通过对传统的数据库的ID与属性之间的映射关系,可以得到一种新的反向映射的关系,例如:表1ID与属性之间的映射关系表#IDProductCustomerAreaOrderSales1P1C1A2O2102P1C3A1O1203P2C2A1O3304P2C3A3O1105P3C3A3O420Product、Customer、Area、Order为四个属性,Sales为每条数据的统计值。在数据仓库中,通常要进行GroupBy的操作,例如:selectsum(sales),productfromtablegroupbyproduct;其结果为30P1;40P2;20P3。其中P1属性对应的Id为1、2,其sales的总和就是10+20=30。将这个GroupBy的属性结果当作一个分割,P1属性的子集是1、2,P2属性的子集为3、4,P3属性的子集就为5。也可以对多个属性进行GroupBy操作,例如拥有属性C1、A2的ID有1,C3、A1的ID是2,C2、A1的ID是3,C3、A3的ID是4和5,所以P(CA)=1|2|3|45。此时,定义agg(P)=12|34|5(agg,即聚合Aggregate,数据库中的GroupBy的结果),故P(P)=12|34|5(P,Partition,表示对属性Product的ID的分割),P(A)=1|23|45,所以可以得到一个从属性到ID的映射,称为反向映射。每一个单独的属性有一个映射,他们的组合也可以得到一个映射,例如:agg(PC)=1|2|3|4|5,agg(CA)=1|2|3|45,即P(PC)=1|2|3|4|5,P(CA)=1|2|3|45。(2)多维度属性的组合实例化一维数据仅能满足极少部分的需求,需要在此基础上进行属性组合,才能满足实际的需要,因为在社保大数据的OLAP中,可能要聚合多种不同种类的组合以满足实际的需要。因此就要进行组合的证明。证明如下:其中,P、Q代表两个分割,t、u代表每个分割的一个子集,例如|1|就是P(A)的一个分割子集,进行分割的交与并操作时,只需要将每一个子集分别进行交和并就可以得到分割的组合。(3)最大分割集经过分割的属性,可能会有相同的分割结果,例如P(PC)=P(PCAO),对于相同的结果,它们是冗余的信息,可以将其删掉,以减少需要存贮的CUBE。为了进一步减少CUBE的数量,可以将可由其他的分割利用交和并的操作得出的结果进行进一步的压缩,如果一个分割可由其他的分割组合而成,就可以说它也是冗余的,对分割集来说,这个分割就不必存储了。(4)实际的分割模型由于在实际操作中,社保数据的维度可以达到十几甚至几十维,因此使用本实施例的分割方法来找到最大分割集将会是一个异常繁重的任务,首先需要找到所有的分割集,然后要对每个分割进行比较,以找到冗余的分割,这在预处理方面是一个极大的开销,因此可以使用一个简化方法,首先假设查询的聚合以低维为主,例如2维、3维,然后在此基础上,每一种组合都可由几个一维的分割来实现,一维的分割指的是单独属性的分割,例如P(A)、P(C)、P(A)等。通过之前的证明,可知,这些一维的分割可以组合成任意的属性组合,如P(CA)、P(PC)等,因此,只存储所有的一维分割,在查询时,进行实时的组合即可达到所有的分割组合。在本发明中,针对社保大数据的特点,首先对数据进行提取、清理、载入,以形成合理的数据仓库,然后再进行进一步的提取,得到本实施例模型需要的属性反向映射的键值对数据库,此即为需要的最终的数据格式,之后的操作都是基于这个键值对数据库的。所以在这里使用了一个高性能的键值对数据库程序接口LMDB(LightningMemoryDatabase),以加快对键值对数据库的I/O,从而提高整体性能。将上述社保大数据OLAP预处理方法及在线分析查询方法和系统应用于社保大数据技术研究与综合业务公共服务应用平台,具体如下:社保大数据综合业务公共服务平台依据国家级的信息化规划方案“金保工程”进行规划建设。现有社保业务系统的设计实施,基于各部门具体需求形成,业务数据因分散在各个业务系统中,提供的服务未能整合成一个整体数据服务。基于现有背景,该项目对各个孤立的社保业务服务资源进行整合,构建一个社保综合业务公共服务平台,在原本相互隔离的“数据孤岛”间架起沟通的桥梁,组成面向全局的统一数据视图及数据共享。为了测试本发明的OLAP方法及系统的应用效果,利用这一社保大数据的数据库进行实验。一种基于上述预处理方法的在线分析查询系统,包括:列式分布式文件系统,包括键值对数据仓库,负责数据存储;适用于此系统的查询分析SQL语句解析器,将对应的SQL语句翻译成需要的结果,并进行查询;一个客户端界面展示系统,用于向客户提供数据查询结果。对这一社保数据,有四个已经生成的数据仓库表,分别是参保人表、人资字典表、劳动力登记表、招工登记表。对这四个表进行对比和整理后发现,只对参保人表、人资字典表、劳动力登记表进行整理、清理,即可得到需要的数据,一共有26维的数据,因此生成了26个键值对数据库,存储在硬盘上共占用16.8MB的空间,现有的数据量在15000行左右。对于联机分析处理的性能考量,主要从执行查询分析的效率上体现。为验证OLAP查询性能,编写了三组9个SQL的查询语句进行查询,以获得必须的查询时间,从而验证模型的效率,这三组SQL查询语句几乎囊括了所有的这15000条数据,每一组所要查询的条目尽量不要重叠,以避免缓存带来的影响。此外,这三组查询语句分别从三个聚集角度来对社保大数据进行查询,分别使用了二维、三维的聚类来实现,以确保在不同维度下查询效率的比较。以下都是基于这三组数据测试得出的结果:表2基于社保数据的查询时间实验结果:数据输入时间(μs)聚合操作时间(μs)行数postgreSQL查询时间(μs)12027812884553637221000217077130840924861750003230451254624556162000477737497117113871750005546625052048761143000650628503349674214400071580067149067160651430008200907915424752764119000925815561434648258101000图3给出了使用本实施例的方法与系统进行查询时的时间,此时间又可分为两部分,一个是对数据的输入输出的时间,另一个为不同维度的数据的聚合所用的时间,图4给出了查询时间与各查询到的数据量的关系,图5给出了本实施例的方法与系统框架与商用数据库的对比。可以看到,与传统的商用数据库相比,针对万级的数据而言,此模型的查询效率只有微小的提升,但是当数据量达到百万、千万甚至上亿时,传统商用数据库的性能就会显著下降。本实施例的方法和系统的时间效率主要体现在对不同维度的数据的组合上,针对另外一个数据集SSB(StarSchemaSenchmark)的实验,如图6,SSB中的数据条目共有六百多万条,可以看到在这里时间差距已经不是那么大,甚至有些查询的时间已经低于postgreSQL的查询时间,可以得出其时间的消耗随着数据量的增大只有微小的增长,因此本实施例的方法和系统也拥有很好的时间效率。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1