基于OLAP的数据查询服务器、系统和方法与流程

文档序号:11950686阅读:339来源:国知局
本发明涉及数据库
技术领域
:,特别是涉及一种基于OLAP的数据查询服务器、系统和方法。
背景技术
::OLAP(OnlineAnalyticalProcessing,联机分析处理)是一种重要的数据分析手段,为企业决策提供支持。随着数据量的不断增长以及用户对性能要求的不断提高,性能问题会变得更加突出。同时,OLAP通常分析的是具有一定时效性的历史数据,已经不能满足当代商业企业对稍纵即逝商机的捕获要求,企业需要分析最新数据而不是历史数据。现有的OLAP系统,基于CPU进行数据查询。过去十年中,通用CPU技术有了很大进展,但性能提高的速度却越来越慢,单线程程序性能在很大程度上受到了限制。这些限制一方面来自于通用计算程序中过低的指令级并行,另一方面CPU受制于功率墙(PowerWall)、存储墙(MemoryWall)和频率墙(FrequencyWall),性能很难继续提高。处理器不会越来越快,而是越来越宽。当前设计的处理器中,大部分晶体管被用于制造高速缓存(Cache),而不是用作计算单元。这样做虽然能把处理器功耗控制在合理的范围内,却阻碍了性能的进一步提高,因此,基于CPU的OLAP系统的难以满足人们高效率查询性能的要求。技术实现要素:基于此,有必要提供一种查询效率高的基于OLAP的数据查询服务器、系统和方法。一种基于OLAP的数据查询服务器,包括CPU和GPU;所述CPU包括请求获取模块、元数据模块和维过滤模块;所述GPU包括方体过滤模块、聚集模块和方体数据模块;所述请求获取模块,用于获取数据查询请求,所述数据查询请求包括待查询的维表信息和事实表信息;所述元数据模块,用于加载与所述待查询的维表信息对应的维表;所述维过滤模块,用于根据所述数据查询请求,对所述维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将所述键值对数据发送给GPU;所述方体数据模块,用于存储与所述事实表信息对应的方体数据;;所述方体过滤模块,用于根据所述键值对数据对所述方体数据过滤得到过滤后的数据;所述聚集模块,用于对所述过滤后的数据进行分组聚集得到请求数据。在一个实施例中,所述维表信息包括维和维的层次信息;所述请求获取模块包括验证器和解析器;所述验证器和所述解析器分别与所述元数据模块连接;所述验证器,用于获取服务API,并验证所述服务API是否符合规范以及封装在所述服务API中的维和维的层次信息是否正确;所述解析器,用于在所述验证器验证通过后,对所述服务API进行解析,得到所述数据查询请求。在一个实施例中,所述数据查询请求的类型包括上卷、下钻、切片、切块和旋转。在一个实施例中,所述CPU还包括缓存模块和查询模块,所述缓存模块,用于缓存历史查询数据;所述查询模块,用于在接收到数据查询请求时,查询所述缓存模块中是否存储有与所述数据查询请求对应的数据;所述维过滤模块在所述缓存模块未存储有与所述数据查询请求对应的数据时被启动;所述聚集模块还用于将分组聚集得到的请求数据发送至所述缓存模块进行存储。在一个实施例中,所述CPU还包括回写模块,用于接收回写请求,并根据所述回写请求对分组聚集得到的所述请求数据进行修改。一种基于OLAP的数据查询系统,包括表示层、存储层和上述的基于OLAP的数据查询服务器;所述表示层用于提供数据查询请求输入入口,将用户输入的数据查询请求封装为对应的服务API,并将所述服务API发送至CPU,以及用于展示查询到的请求数据;所述存储层用于存储OLAP的相关数据,所述相关数据包括维表和事实表;所述元数据模块,用于从所述存储层中加载与所述待查询的维表信息对应的维表;所述方体数据模块,用于存储与所述事实表信息对应的方体数据。一种基于OLAP的数据查询方法,包括:CPU获取数据查询请求,所述数据查询请求包括待查询的维表信息和事实表信息;CPU加载与所述待查询的维表信息对应的维表;CPU根据所述数据查询请求,对所述维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将所述键值对数据发送给GPU;GPU根据所述键值对数据对存储在GPU中与事实表信息对应的方体数据过滤得到过滤后的数据;GPU对所述过滤后的数据进行分组聚集得到请求数据。在一个实施例中,所述CPU获取数据查询请求的步骤包括:CPU获取服务API;CPU验证所述服务API是否符合规范以及封装在所述服务API中的维和维的层次信息是否正确;当验证通过时,CPU对所述服务API进行解析,得到所述数据查询请求。在一个实施例中,所述数据查询请求的类型包括上卷、下钻、切片、切块和旋转。在一个实施例中,在所述当验证通过时,对所述服务API进行解析,得到数据查询请求的步骤之后,还包括:CPU查询缓存中是否存储有与所述数据查询请求对应的数据;若是,则CPU从缓存中返回与所述数据查询请求对应的数据;若否,则执行CPU根据所述数据查询请求,对所述维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将所述键值对数据发送给GPU的步骤;在所述GPU对所述过滤后的数据进行分组聚集得到请求数据的步骤之后,还包括:GPU将分组聚集得到的请求数据发送至CPU并存储在所述缓存中。上述的基于OLAP的数据查询服务器,在接收到数据查询请求时,在CPU端进行维表数据过滤,在GPU端进行事实表数据过滤和分组聚集。由于GPU的具有高性能高效率的特点,通过利用GPU的计算资源,利用GPU加速OLAP的查询,有效地提高OLAP的处理效率。附图说明图1为一个实施例的基于OLAP的数据查询服务器的功能模块示意图;图2为一个实施例的事实表的存储格式;图3为另一个实施例的基于OLAP的数据查询服务器的功能模块示意图;图4为一个实施例的基于OLAP的数据查询系统的功能模块示意图;图5为一个实施例的基于OLAP的数据查询方法的流程图;图6为另一个实施例的基于OLAP的数据查询方法的流程图;图7为一个实施例的上卷查询操作中对where子句的处理运行过程;图8为一个实施例的上卷查询操作中对另一个where子句的处理运行过程;图9为一个实施例的上卷查询操作中对整型字段的规约化的过程;图10为一个实施例的上卷查询操作中获取的满足条件的结果数据;图11为一个实施例的上卷查询操作中获取的最终结果;图12为一个实施例的上卷查询操作在前端显示的最终结果。具体实施方式为了使本发明的目的、技术方案以及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。在一个实施例中,提供一种基于OLAP的数据查询服务器,该服务器包括CPU(CentralProcessingUnit,中央处理器)和GPU(GraphicsProcessingUnit,图形处理器)。由于游戏玩家对图形显示的苛刻要求,近几年来,GPU的性能按时间呈几何级数增长,GPU已经从由若干专用的固定功能单元(FixedFunctionUnit)组成的专用并行处理器,进化为了以通用计算资源为主,固定功能单元为辅的架构,称为GPGPU(GeneralPurposeGPU,通用图形处理器)。OLAP作为一类数据和计算密集型应用,可以通过GPU来加速其计算量大、性能要求高的一些操作,可以有效地提高OLAP的处理效率。如图1所示,基于OLAP的数据查询服务器10,包括CPU12和GPU14。CPU12包括请求获取模块120,元数据模块122和维过滤模块124。GPU14包括方体过滤模块140、聚集模块142和方体数据模块144。请求获取模块120,用于获取数据查询请求。数据查询请求包括待查询的维表信息和事实表信息。元数据模块122,用于加载与待查询的维表信息对应的维表。维表包含了事实表中指定属性的相关详细信息,比如,详细的产品对应的产品维表,或按时间分析的时间维表。维表示人们分析数据的方式,也是组成方体的基本元素,可以包含多个层次,每个层次有多个成员,例如,包括产品信息的维表通常包含将产品分为食品、饮料、非消费品等若干类层次结构,维表中的列字段可以将信息分为不同的层次的结构。维表以列数组结构体方式存储,一个实施例中,一个客户维可以存储为结构体如下:维的层次信息通过模式文件存储和表示。维过滤模块124,用于根据数据查询请求,对维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将键值对数据发送给GPU。方体数据模块144,用于存储与事实表信息对应的方体数据。事实表用来存储事实的度量及指向各个维的外键值,是数据聚合后依据某个维度生成的结果表,事实表存储在硬盘中。在对应的事实表第一次被查询时,从硬盘被加载得到对应的方体数据,方体数据存储在GPU的全局内存,以多维数组方式存储,一个实施例的方体数据如图2所示。方体过滤模块140,用于根据键值对数据对方体数据过滤得到过滤后的数据。具体为,判断对应事实表中的相应与维度对应列中的每个元素是否满足数据查询请求中查询请求的要求,如果满足则将对应位置置为1,否则为0,从而得到过滤后的数据。聚集模块142,用于对过滤后的数据进行分组聚集得到请求数据。分组聚集具体为根据数据查询请求的命令进行对过滤后的数据进行聚集,数据查询请求的类型包括钻取、上卷、切片、切块和旋转。聚集模块根据对应的查询请求的类型进行对应的分组聚集从而得到请求数据。上述的基于OLAP的数据查询服务器,在接收到数据查询请求时,在CPU端进行维表数据过滤,在GPU端进行事实表数据过滤和分组聚集。由于GPU的具有高性能高效率的特点,通过利用GPU的计算资源,利用GPU加速OLAP的查询,有效地提高OLAP的处理效率。在另一个实施例中,维表信息包括维和维的层次信息。如图3所示,请求获取模块120包括验证器121和解析器123,验证器121和解析器123分别与元数据模块122连接。验证器121,用于获取服务API,并验证服务API是否符合规范以及封装在服务API中的维和维的层次信息是否正确。服务API(ApplicationProgrammingInterface,应用程序编程接口)是指系统预先定义的函数。前端在接收到请求的查询请求时,将查询请求封装为对应的服务API。验证器121接收到数据查询请求对应的服务API时,验证服务API是否符合规范,具体的,验证服务API中封装的与数据查询请求对应的查询指令是否符合规范,查询请求的类型包括上卷、下钻、切片、切块和旋转,验证器121验证服务API中封装的查询请求是否符合对应的查询请求的要求,查询语句是否有错。维表中的列字段可以将信息分为不同的层次的结构,验证器121验证服务API中的查询命令中的维和对应的维的层次信息是否正确,即查询命令中的维和维的层次信息与维表中的信息是否一致。若不一致,则为查询命令错误,不能进行查询。解析器122,用于在验证器通过验证后,对服务API进行解析,得到数据查询请求。通过对服务API进行解析,从而得到数据查询请求,包括待查询的维表信息和事实表信息以及具体的查询请求的类型。请继续参阅图3,在另一个实施例中,CPU还包括缓存模块125和查询模块127。缓存模块125用于缓存历史查询数据。查询模块127,用于在接收到数据查询请求时,查询缓存模块125中是否存储有与数据查询请求对应的数据。维过滤模块124在缓存模块125未存储有与数据查询请求对应的数据时被启动;聚集模块142还用于将分组聚集得到的请求数据发送至缓存模块进行存储。缓存模块125缓存有历史查询数据,解析器123在对服务API进行解析获得数据查询请求后,先在缓存中查询是否有与数据查询请求对应的数据。若有,则直接将缓存模块125中对应的数据返回。若缓存模块125中未存储中与数据查询请求对应的数据时,维过滤模块被启动,根据数据查询请求,对维表进行过滤,获得过滤后的以键值对表示的键值对数据,将键值对数据发送给GPU。同时,在GPU的聚集模块142分组聚集得到的请求数据后,还将请求数据发送至缓存模块125进行存储。虽然GPU具有较高的计算效率,但是启动GPU程序及GPU和CPU的数据传输具有较高的代价,本实施例的基于OLAP的数据查询服务器,通过在CPU设置用于缓存历史查询数据的缓存模块,在解析得到数据查询请求时,先在CPU的缓存模块中查找是否存储有与数据查询请求对应的数据,只有在缓存模块未存储有与数据查询请求对应的数据时,才执行后续的查询操作,从而能够避免重复计算,提高数据查询的效率。在另一个实施例中,CPU还包括回写模块126,用于接收回写请求,并根据回写请求对分组聚集得到的请求数据修改,支持类似“what-if”的假设分析。随着OLAP向更广更深入的领域应用,简单的分析型查询已不能满足用户决策支持要求的Forecasting、Planning、Budgeting等查询。传统OLAP对数据操作以读为主,数据进行周期性的更新。但用户驱动型规划类查询,需要对数据进行修改,比如What-if分析。因此系统提供了回写模块126,允许用户对聚集数据进行实时修改。这些修改数据不实际更新到基础数据集中,而是存储在回写模块中,用户的查询结果由真实结果和用户的回写数据组合给出。在一个实施例中,提供一种OLAP的数据查询系统,如图4所示,包括表示层20、存储层30和上述的基于OLAP的数据查询服务器10。表示层20,用于提供数据查询请求输入入口,将用户输入的数据查询请求封装为对应的服务API,并将服务API发送至CPU,以及用于展示查询到的请求数据。为了使系统具有更强的易用性、可操作性,本实施例中以EXCEL作为OLAP的客户端,EXCEL作为一种广泛应用的表格处理工具,以其操作简便,功能强大,获得了用户的青睐。但EXCEL具有很多先天不足,EXCEL的优势在于数据展示,但大部分用户使用EXCEL作为数据存储,当数据量较大,文件较多时,就会出现常说的“EXCELHELL”。但如果为EXCEL在后台添加一个数据管理服务器,则可以克服这些问题,进一步提升EXCEL的性能和易用性。同时,EXCEL具有很强的可编程性,通过VBA或其他插件开发工具,很容易的扩展EXCEL的功能,使EXCEL成为OLAP的数据查询系统的一个前端展示工具,同时又可以利用EXCEL的数据展示功能。在其它的实施例中,也支持Web的方式进行访问。存储层30,用于存储OLAP的相关数据,相关数据包括维表和事实表。元数据模块,用于从存储层中加载与待查询的维表信息对应的维表;方体数据模块,用于存储与事实表信息对应的方体数据。在一个实施例中,数据查询服务器还包括ELT模块,用于从生产数据中实时获取数据,并转化为系统数据存储格式。ETL(Extract-Transform-Load),即填充、更新数据仓库的数据抽取、转换、装载的过程。在实时OLAP中,要尽量保持OLAP数据和生产数据一致,所以ETL工具尤为重要。实时ETL无论是对生产数据库还是OLAP系统都会产生很大的压力。需要生产数据库实时将新数据发送过来,OLAP实时的处理新数据。为此,在CPU的内存中开辟一块内存空间,专门用来存储新增量数据,当执行用户查询时,GPU和CPU同时处理,但操作不同的数据,最后两个结果合并,产生最后结果。随着增量数据的增大,当数据超过某一阈值,OLAP将增量数据刷新到存储在GPU的基础数据中。本实施例的基于OLAP的数据查询系统,还提供了API函数方便客户端程序调用。API主要是对常用OLAP操作的封装,主要包括:上卷、下钻、切块、切片和旋转及对What-if假设分析的支持。上卷(Roll-up)的函数包括:Void**Rollup(string*aggfunction,string*measures,string*groupbys,string*orderbys,string*tables,string*where),其中,Aggfunction为上卷操作对应的聚集函数,比如sum,支持多个;Measures为聚集函数对应的测度字段;Groupbys为分组字段;Orderbys为排序字段;Tables主要涉及的表;Wheres主要涉及的WHERE条件包括(=,>,<,>=,<=,between,in)条件之间通过AND连接。下钻(Drill-down),在OLAP系统中不存储聚集数据,通过实时计算获取聚集数据,下钻操作是一个上卷操作。下钻的函数包括:Void**drilldown(string*aggfunction,string*measures,string*drilldown)。其中,Aggfunction为下钻函数;Measures为下钻对应的测度字段;Drilldown为下钻维层次信息,即下钻在那个维的那个层的那个值上进行。切块(Dicing)操作就是获取一部分数据,相当于where条件。切块的函数包括Void**Dicing(string*measures,string*dimensions1,string*dimensions2),其中,measures为需要获取的测度字段;dimensions1为切块的维属性组合-下界;dimensions2为切块的维属性组合-上界。切片(Slicing)操作是切块操作的特例,切块是在多个维上进行的范围过滤,切片是在一个维上的等值过滤。切片的函数包括:Void**Dicing(string*measures,string*dimensions);其中,measures为需要获取的测度字段;dimensions为切片的维属性组合。上述的基于OLAP的数据查询系统,在接收到数据查询请求时,在CPU端进行维表数据过滤,在GPU端进行事实表数据过滤和分组聚集。由于GPU的具有高性能高效率的特点,通过利用GPU的计算资源,利用GPU加速OLAP的查询,有效地提高OLAP的处理效率。在一个实施例中,还提供一种基于OLAP的数据查询方法,该方法基于OLAP的数据查询服务器实现,如图5所示,该方法包括以下步骤:S502:CPU获取数据查询请求,数据查询请求包括待查询的维表信息和事实表信息。S504:CPU加载与待查询的维表信息对应的维表。S506:CPU根据数据查询请求,对维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将键值对数据发送给GPU。S508:GPU根据键值对数据对存储在GPU中与事实表信息对应的方体数据过滤得到过滤后的数据。具体为,判断对应事实表中的相应与维度对应列中的每个元素是否满足数据查询请求中查询请求的要求,如果满足则将对应位置置为1,否则为0,从而得到过滤后的数据。S510:GPU对过滤后的数据进行分组聚集得到请求数据。分组聚集具体为根据数据查询请求的命令进行对过滤后的数据进行聚集,数据查询请求的类型包括钻取、上卷、切片、切块和旋转。聚集模块根据对应的查询请求的类型进行对应的分组聚集从而得到请求数据。上述的基于OLAP的数据查询方法,在接收到数据查询请求时,在CPU端进行维表数据过滤,在GPU端进行事实表数据过滤和分组聚集。由于GPU的具有高性能高效率的特点,通过利用GPU的计算资源,利用GPU加速OLAP的查询,有效地提高OLAP的处理效率。如图6所示,步骤S502包括以下步骤:S5021:CPU获取服务API。服务API(ApplicationProgrammingInterface,应用程序编程接口)是指系统预先定义的函数。前端在接收到请求的查询请求时,将查询请求封装为对应的服务API。S5022:CPU验证服务API是否符合规范以及封装在服务API中的维和维的层次信息是否正确。若验证通过,则执行步骤S5023。接收到数据查询请求对应的服务API时,验证服务API是否符合规范,具体的,验证服务API中封装的与数据查询请求对应的查询指令是否符合规范,查询请求的类型包括上卷、下钻、切片、切块和旋转,验证服务API中封装的查询请求是否符合对应的查询请求的要求,查询语句是否有错。维表中的列字段可以将信息分为不同的层次的结构,验证服务API中的查询命令中的维和对应的维的层次信息是否正确,即查询命令中的维和维的层次信息与维表中的信息是否一致。若不一致,则为查询命令错误,不能进行查询。S5023:CPU对服务API进行解析,得到数据查询请求。通过对服务API进行解析,从而得到数据查询请求,包括待查询的维表信息和事实表信息以及钻取等查询请求。请继续参阅图6,在步骤S5023之后,还包括:S5024:CPU查询缓存中是否存储有与数据查询请求对应的数据。若是,则执行步骤S5025,若否,则执行步骤S504。S5025:CPU从缓存中返回与数据查询请求对应的数据。缓存中缓存有历史查询数据,在对服务API进行解析获得数据查询请求后,先在缓存中查询是否有与数据查询请求对应的数据。若有,则直接将缓存模块125中对应的数据返回。若缓存模块中未存储中与数据查询请求对应的数据时,CPU根据所述数据查询请求,对所述维表进行过滤,获得过滤后的以键值对表示的键值对数据,并将所述键值对数据发送给GPU。同时,在步骤S506之后,还包括:S512:GPU将分组聚集得到的请求数据发送至CPU并存储在缓存中。虽然GPU具有较高的计算效率,但是启动GPU程序及GPU和CPU的数据传输具有较高的代价,本实施例的基于OLAP的数据查询服务器,通过在CPU设置用于缓存历史查询数据的缓存模块,在解析得到数据查询请求时,先在CPU的缓存模块中查找是否存储有与数据查询请求对应的数据,只有在缓存模块未存储有与数据查询请求对应的数据时,才执行后续的查询操作,从而能够避免重复计算,提高数据查询的效率。具体的,查询查询请求的类型包括上卷、下钻、切片、切块和旋转。其中,下钻Drill-down是上卷操作的一种特殊情况,OLAP系统将下钻操作转换为roll-up操作。上卷(Roll-up),主要就是聚集操作,类似SQL语言中的Groupby操作。一个实施例的查询请求命令如下:selectsum(lo_revenue),d_year,p_brand1fromlineorder,date,part,supplierwherelo_orderdate=d_datekeyandlo_partkey=p_partkeyandlo_suppkey=s_suppkeyandp_brand1between'MFGR#2221'and'MFGR#2228'ands_region='ASIA'groupbyd_year,p_brand1orderbyd_year,p_brand1。具体的,根据查询请求,查询包括以下步骤:S1:CPU根据p_brand1between'MFGR#2221'and'MFGR#2228'条件,在part表中获取p_partkey的集合{1114,1587,3631,4378…}。运行过程如图7所示。S2:根据s_region='ASIA'条件,在supplier表中获取s_suppkey的值的集合{11,12,15,23,26,27,…},效果如图8所示.S3:将两个集合和(datakey,d_year),(partkey,p_brand1)两个Key-Value表从CPU发送到GPU。在这个步骤中需要对非整数型字段进行规约化。比如这里p_brand1是一个字符数据,需要对其进行编码处理。数据转换过程和传输的键值对形式如图9示.S4:GPU启动内核程序,完成数据过滤,过滤算法近似为,对存储在GPU上的事实表lo_revenue、d_year和p_brand1进行过滤。对p_partkey和s_suppkey两列中的每个元素是否满足要求,如果满足标识位置1,否则置0。然后通过前缀和扫描,获取过滤后的数据。过程如图10所示.S5:将过滤后的d_year和p_brand1两列按一定线性化处理。然后排序,前缀扫描,约简等步骤,最终得到结果。过程如图11所示S6:将线性化排序结构逆线性化,并将结果从GPU端传回给CPU端,最终在前端显示,如图12所示。通过上述方式,避免了复杂耗时的星型Join操作,同时利用了GPU来进行聚集计算的能力。切块dicing和切片slicing具体为获取一部分数据。相当于处理where条件。一个实施例的切块的查询命令为:Selectd_datekey,lo_revenuefromlineorder,supplierwherelo_suppkey=s_suppkeyands_region='ASIA';具体的,根据查询请求,查询包括以下步骤:S1:根据条件s_region='ASIA'获取对应的s_suppkey的集合。S2:每个线程对s_suppkey列的值判断是否在集合中,考虑采用顺序查找或排序后二分法查找。S3:将得到的集合发送给GPU。S4:生成一个位向量,在满足条件的向量对应位置置1,否则置0。S5:对位向量prefixsum,确定最终结构大小n。S6:重新启动GPU,并分配2n空间。S7:将d_datekey,lo_revenue对应标志位为1的放到新空间中。以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1