关系型数据库的多维分析的方法及装置的制造方法

xiaoxiao2020-10-23  21

关系型数据库的多维分析的方法及装置的制造方法
【技术领域】
[0001]本发明实施例涉及数据库查询技术,尤其涉及一种关系型数据库的多维分析的方法及装置。
【背景技术】
[0002]多维分析是商业智能(Business Intelligence,BI)的一个核心概念,广泛应用到数据分析、决策支持等系统中。多维分析的核心是多维分析模型,里面定义了 “维度”、“层次”、“级别”、“指标”等元素,以及“指标”的事实表和“维度”的维表之间的关系。根据多维分析模型进行多维分析查询,得出多维分析结果。多维分析报表是对多维分析结果的一种展现形式,由“维”(影响因素)和“指标”(衡量因素)组成,能够真正为用户所理解、并真实的反映企业特性信息。
[0003]多维分析查询与关系型数据库查询不同,多维分析查询使用MDX(MultiDimens1nal express1ns,多维分析)语言。基于关系型数据库的多维分析,分析引擎(如开源的多维分析引擎Mondrian)会将MDX翻译成SQL,并将结果以多维分析的方式展现给用户。在基于关系型数据库的多维分析中,由于一条MDX语句会翻译出多条SQL语句来执行,所以一旦出现性能问题,开发人员很难准确的判断出性能的瓶颈是什么,从而需要较长时间进行问题的排查,导致多维分析的效率较低。

【发明内容】

[0004]有鉴于此,本发明实施例提供一种关系型数据库的多维分析的方法及装置,以利于发现性能问题,提高多维分析的效率。
[0005]第一方面,本发明实施例提供了一种关系型数据库的多维分析的方法,所述方法包括:
[0006]在关系型数据库中建事实表和维表,并建多维分析模型;
[0007]将所述多维分析模型中的MDX语句翻译成SQL语句;
[0008]对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示;
[0009]采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。
[0010]进一步地,在关系型数据库中建事实表和维表,并建多维分析模型之后,还包括:
[0011]对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果;
[0012]根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。
[0013]进一步地,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果,包括:
[0014]根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验;
[0015]根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。
[0016]进一步地,根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示,具体包括:
[0017]当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或
[0018]当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提示。
[0019]进一步地,根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议包括:
[0020]如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议:
[0021]所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引;
[0022]在所述维表中,所有层次中的所有级别对应的列分别建立单独索引;
[0023]不建议建立联合索引。
[0024]第二方面,本发明实施例还提供了一种关系型数据库的多维分析的装置,所述装置包括:
[0025]多维分析模型建立模块,用于在关系型数据库中建事实表和维表,并建多维分析丰旲型;
[0026]语句翻译模块,用于将所述多维分析模型中的MDX语句翻译成SQL语句;
[0027]输出显示模块,用于对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示;
[0028]查询模块,用于采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。
[0029]进一步地,还包括:
[0030]校验模块,用于在关系型数据库中建事实表和维表,并建多维分析模型之后,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果;
[0031]优化建议模块,用于根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。
[0032]进一步地,所述校验模块包括:
[0033]校验单元,用于根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验;
[0034]预警提示单元,用于根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。
[0035]进一步地,所述预警提示单元具体用于:
[0036]当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或
[0037]当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提示。
[0038]进一步地,所述优化建议模块具体用于:
[0039]如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议:
[0040]所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引;
[0041]在所述维表中,所有层次中的所有级别对应的列分别建立单独索引;
[0042]不建议建立联合索引。
[0043]本发明实施例提供的关系型数据库的多维分析的方法及装置,通过输出显示多维分析模型中的MDX语句、所述MDX语句翻译成的SQL语句及SQL执行步骤,有利于开发人员及时发现可能存在的性能问题,提高了多维分析的效率,可以方便开发人员监控MDX语句生成SQL语句,方便了多维分析调优的工作。
【附图说明】
[0044]图1是本发明实施例一提供的一种关系型数据库的多维分析的方法的流程图;
[0045]图2是本发明实施例二提供的一种关系型数据库的多维分析的方法的流程图;
[0046]图3是本发明实施例二提供的一种关系型数据库的多维分析的方法的系统架构图;
[0047]图4是本发明实施例三提供的一种关系型数据库的多维分析的装置的示意图。
【具体实施方式】
[0048]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0049]实施例一
[0050]图1是本发明实施例一提供的一种关系型数据库的多维分析的方法的流程图,本实施例可适用于对现有技术中的关系型数据库的多维分析进行优化,该方法可以由计算机来执行,具体包括如下步骤:
[0051]步骤110,在关系型数据库中建事实表和维表,并建多维分析模型。
[0052]对关系型数据库中存储的数据进行整理,将记录业务指标等事实的数据(如销售数据)及维度外键的数据建为多维分析的事实表,其中,事实表中的外键能将事实表与维表关联起来,代表着所引用的维度和事实;将记录维度信息的数据(如时间维度、地区维度等)建为多维分析的维表。例如:事实表记录了某一天的销售信息,则事实表的外键是对应的时间维表的主键,加入这个值是20150519,通过事实表中的这个外键,可以找到维表中对应的一行时间的记录。
[0053]根据需要进行多维分析查询的数据,建立多维分析模型。多维分析模型是对于一个分析主题的描述,描述了一个分析主题需要哪些维度、指标(度量)以及在数据库层各个数据库表之间的关系等。例如:分析京东去年在北京各个区的销量,对于这个分析主题,要抽象出“时间”、“区县”两个维度,“销量”一个指标,多维分析模型就是描述这个分析主题中这些维度、指标的,还有这些维度、指标在数据库中的关系等。多维分析模型描述了事实表、维度、层次、级别等元素的定义,以及事实表和各维表之间的关系。其中,层次是维表中的分析等级顺序,如时间维度,可以有“年月”、“年月日” 、“年季月日”等多个分析层次。级别是层次中的一个等级,如在时间维度中,“年月”层次里,“年”是第一个级别,“月”是第二个级别。
[0054]步骤120,将所述多维分析模型中的MDX语句翻译成SQL语句。
[0055]MDX查询语句支持多维对象与数据的定义和操作,是基于多维分析模型的查询语句。计算机在对关系型数据库进行多维分析时,将基于多维分析模型的MDX语句自动翻译成多条SQL (Structured Query Language,结构化查询语言)语句。
[0056]步骤130,对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示。
[0057]计算机在利用所述SQL语句进行查询时,通过JDBC(Java Data BaseConnectivity, Java数据库连接)执行SQL语句,这时,通过Java接口动态代理方式拦截JDBC对SQL语句的执行,对拦截到的SQL语句进行编译,进而确定SQL执行步骤(即SQL执行计划),将所述MDX语句、所述MDX语句翻译成的SQL语句以及对应的所述SQL执行步骤进行输出并显示,以供开发人员了解,以供开发人员了解到所存在的性能问题。其中,可以将所述MDX语句、SQL语句以及对应所述SQL执行步骤输出到多种介质中,如日志文件或数据库表等。本步骤可以通过配置文件来触发。
[0058]其中,JDBC是一种用于执行 SQL 语句的 Java API (Applicat1n ProgrammingInterface,应用程序编程接口),可以为多种关系型数据库提供统一访问,由一组用Java语言编写的类和接口组成。SQL执行计划描述执行一条SQL语句时必须执行的详细步骤,根据数据库的不同和版本的不同,会包括索引的使用情况、执行时间及查询出的记录数等信息。
[0059]步骤140,采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。
[0060]采用所述SQL语句对所述事实表和维表执行SQL查询,将SQL查询结果通过多维分析函数、算法等进行计算和分析,得到最终的基于所述多维分析模型的多维分析查询结果,并返回多维分析的查询结果。其中,多维分析的查询结果有多种展示形式,包括表格或者饼图等。
[0061]本实施例通过在关系型数据库中建事实表和维表,并建多维分析模型,将多维分析模型中的MDX语句翻译成SQL语句,并对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示,采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果,通过输出显示所述MDX语句、SQL语句及SQL执行步骤,有利于开发人员及时发现可能存在的性能问题,提高了多维分析的效率,简化了开发人员对MDX语句性能分析的工作,可以方便开发人员监控MDX语句生成SQL语句,方便了多维分析调优的工作。
[0062]实施例二
[0063]图2是本发明实施例二提供的一种关系型数据库的多维分析的方法的流程图,具体包括如下步骤:
[0064]步骤210,在关系型数据库中建事实表和维表,并建多维分析模型。
[0065]步骤220,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果。
[0066]在接收到用户的校验指令后,对所述多维分析模型中的事实表和维表之间的结构(如数据类型)、以及索引关系进行校验,具体可以校验事实表与维表的主外键是否合理,包括索引是否建立、数据类型是否一致、字符类型的字段是否超出255个字节等,并输出显示校验结果,供开发人员参考。校验结果是根据校验得出的可能会影响多维分析性能的警告,例如:在一个多维分析模型中,一个维表的主键列和事实表中的外键列的数据类型不同;事实表中某一个键列没有建立索引;事实表中的建立索引的外键列的长度超过了 255个字节;等等。
[0067]优选的,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果,包括:
[0068]根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验;
[0069]根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。
[0070]其中,事实表与维表所对应的列即事实表的外键列与维表的主键列。
[0071]优选的,根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示,具体包括:
[0072]当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或
[0073]当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提示。
[0074]步骤230,根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。
[0075]例如:如果校验结果为一个维表的主键列和事实表中的外键列的数据类型不同,则对所述事实表和维表之间的结构、索引关系给出的优化建议为将维表的主键列和事实表中的外键列的数据类型修改为相同数据类型;如果校验结果为事实表中某一个键列没有建立索引,则对所述事实表和维表之间的结构、索引关系给出的优化建议为为事实表中没有建立索引的键列建立索引;如果事实表中的建立索引的外键列的长度超过了 255个字节,则对所述事实表和维表之间的结构、索引关系给出的优化建议为建议将事实表中的建立索引的外键列的长度控制在255个字节以内;如果校验结果为维表中级别列的数据均为数值,却定义了非数值类型,则建议改为数值类型;等等。
[0076]其中,根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议,优选包括:
[0077]如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议:
[0078]所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引;
[0079]在所述维表中,所有层次中的所有级别对应的列分别建立单独索引;
[0080]不建议建立联合索引。
[0081]如果所述事实表和维表之间的结构、以及索引关系不明确,或者,所述事实表和维表之间的结构、以及索引关系不合理,所述事实表和维表之间的结构、以及索引关系不利于开发人员排查问题。在多维分析中出现性能问题时,由于索引关系不明确开发人员无法快速发现问题,需要很长时间去排查,从而影响多维分析的整体效率;当所述事实表和维表之间的索引关系不合理时,在执行查询的时候,不能查找到相应的索引列,从而出现问题,还需要开发人员去排查问题,从而影响多维分析的整体效率。当所述事实表和维表之间的结构、以及索引关系会影响多维分析的效率时,便会产生如上所述的提示建议。在除了上述的单独索引以外,不建议建立其他的单独索引。
[0082]步骤240,将所述多维分析模型中的MDX语句翻译成SQL语句。
[0083]步骤250,对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示。
[0084]步骤260,采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。
[0085]图3是本发明实施例二提供的一种关系型数据库的多维分析的方法的系统架构图,如图3所示,其中,优化分析组件包括模型分析组件和SQL分析组件,模型分析组件用于对多维分析引擎中建立的多维分析模型进行校验分析,SQL分析组件用于拦截JDBC对MDX语句翻译成的SQL语句的执行,执行SQL的执行计划,并输出结果到指定位置,结果包括MDX语句、所述MDX语句翻译成的SQL语句和执行计划的结果。其中,模型分析组件会给出预警提示和优化建议。SQL分析组件在通过配置文件开启SQL分析功能后才会拦截JDBC对SQL语句的执行,在配置文件没有开启SQL分析功能时,则不会对SQL语句的执行进行拦截。
[0086]如图3所示,实线框中的多维分析引擎是现有技术中的多维分析的方法,虚线框中的模型分析组件是本发明实施例加入的优化方法,从图3中可以看出,本发明实施例提供的关系型数据库的多维分析的方法采用非侵入式的方式对原有的多维分析系统进行分析和监控,可以提前发现一些性能问题,做到事先预防。
[0087]其中,多维分析引擎可以采用Mondrian,Mondrian是使用Java开发的、开源的基于关系数据库(而非多维数据库)的多维分析引擎,它实 现了 xmla和jolap规范,而且自定义了一种使用MDX语言的客户端接口。
[0088]本实施例通过对建立的多维分析模型中的事实表和维表之间的结构、索引关系进行校验,并输出校验结果,根据校验结果给出优化建议,进一步揭示了多维分析模型中可能存在的性能问题,有利于开发人员及时发现可能存在的性能问题,进一步提高了多维分析的效率,给出的优化建议可以使得对数据库技术不是特别熟悉的开发人员了解到可能存在的性能问题,并根据优化建议进行修改,而且给出的优化建议是对多维分析模型整体进行了分析后给出的结论而不是针对其中的某一个分析单元。
[0089]实施例三
[0090]图4是本发明实施例三提供的一种关系型数据库的多维分析的装置的示意图,如图4所示,本实施例提供的关系型数据库的多维分析的装置包括:多维分析模型建立模块410、语句翻译模块420、输出显示模块430和查询模块440。
[0091]其中,多维分析模型建立模块410用于在关系型数据库中建事实表和维表,并建多维分析模型;
[0092]语句翻译模块420用于将所述多维分析模型中的MDX语句翻译成SQL语句;
[0093]输出显示模块430用于对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示;
[0094]查询模块440用于采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。
[0095]优选的,还包括:
[0096]校验模块,用于在关系型数据库中建事实表和维表,并建多维分析模型之后,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果;
[0097]优化建议模块,用于根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。
[0098]优选的,所述校验模块包括:
[0099]校验单元,用于根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验;
[0100]预警提示单元,用于根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。
[0101]优选的,所述预警提示单元具体用于:
[0102]当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或
[0103]当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提示。
[0104]优选的,所述优化建议模块具体用于:
[0105]如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议:
[0106]所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引;
[0107]在所述维表中,所有层次中的所有级别对应的列分别建立单独索引;
[0108]不建议建立联合索引。
[0109]上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
[0110]注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【主权项】
1.一种关系型数据库的多维分析的方法,其特征在于,所述方法包括: 在关系型数据库中建事实表和维表,并建多维分析模型; 将所述多维分析模型中的多维分析MDX语句翻译成结构化查询语言SQL语句; 对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示; 采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。2.根据权利要求1所述的方法,其特征在于,在关系型数据库中建事实表和维表,并建多维分析模型之后,还包括: 对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果; 根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。3.根据权利要求2所述的方法,其特征在于,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果,包括: 根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验; 根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。4.根据权利要求3所述的方法,其特征在于,根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示,具体包括: 当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或 当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提不。5.根据权利要求2所述的方法,其特征在于,根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议包括: 如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议: 所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引; 在所述维表中,所有层次中的所有级别对应的列分别建立单独索引; 不建议建立联合索引。6.一种关系型数据库的多维分析的装置,其特征在于,所述装置包括: 多维分析模型建立模块,用于在关系型数据库中建事实表和维表,并建多维分析模型; 语句翻译模块,用于将所述多维分析模型中的MDX语句翻译成SQL语句; 输出显示模块,用于对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示; 查询模块,用于采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果O7.根据权利要求6所述的装置,其特征在于,还包括: 校验模块,用于在关系型数据库中建事实表和维表,并建多维分析模型之后,对所述多维分析模型中的事实表和维表之间的结构、以及索引关系进行校验,并输出校验结果; 优化建议模块,用于根据所述校验结果,对所述事实表和维表之间的结构、以及索引关系给出优化建议。8.根据权利要求7所述的装置,其特征在于,所述校验模块包括: 校验单元,用于根据所述多维分析模型中的事实表与维表的关系,对所述事实表和所述维表所对应的列进行校验; 预警提示单元,用于根据校验得出数据库中事实表或维表的结构定义不合理,则给出预警提示。9.根据权利要求8所述的装置,其特征在于,所述预警提示单元具体用于: 当所述事实表的外键列的数据类型与所述维表中的级别列的数据类型不一致时,给出预警提示;或 当所述事实表或所述维表中的索引列为字符类型且长度超过255个字节时,给出预警提不。10.根据权利要求7所述的装置,其特征在于,所述优化建议模块具体用于: 如果校验结果表明所述事实表和维表之间的结构、以及索引关系影响多维分析的效率,则产生如下至少一项提示建议: 所述多维分析模型中的事实表与维表关联的各外键列分别建立单独索引; 在所述维表中,所有层次中的所有级别对应的列分别建立单独索引; 不建议建立联合索引。
【专利摘要】本发明公开了一种关系型数据库的多维分析的方法及装置。该方法包括:在关系型数据库中建事实表和维表,并建多维分析模型;将所述多维分析模型中的MDX语句翻译成SQL语句;对所述SQL语句进行编译以确定SQL执行步骤,并将所述MDX语句、SQL语句以及对应所述SQL执行步骤进行输出显示;采用所述SQL语句对所述事实表和维表执行SQL查询,并返回查询结果。本发明通过输出显示多维分析模型中的MDX语句、所述MDX语句翻译成的SQL语句及SQL执行步骤,有利于开发人员及时发现可能存在的性能问题,提高了多维分析的效率,可以方便开发人员监控MDX语句生成SQL语句,方便了多维分析调优的工作。
【IPC分类】G06F17/30
【公开号】CN104899291
【申请号】CN201510305578
【发明人】尹家彬, 胡浩, 马斗, 常伟, 李涛, 宋全旺, 李雪楠, 王乐, 宋腾, 刘兴瑶
【申请人】北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
【公开日】2015年9月9日
【申请日】2015年6月5日

最新回复(0)