一种基于关系型数据库的海量结构化数据的存储方法

文档序号:6621980阅读:340来源:国知局
一种基于关系型数据库的海量结构化数据的存储方法【专利摘要】本发明公开了一种基于关系型数据库的海量结构化数据的存储方法,该方法包括:A、接收客户端发送数据处理的SQL语句,分析其的语法结构;B、根据语法结构,读取需操作表的元数据信息;C、根据元数据信息中的分布规则生成各工作节点的执行计划;D、通过消息对列的方式将各执行计划发送给各工作节点;E、通过消息对列的方式接收各工作节点的执行结果;F、将各工作节点的执行结果汇总,结合事务处理获得事务执行结果,并将所述事务执行结果发送给客户端。采用本技术方案在无需对原有RDBMS应用系统做大修改的前提下,提高大规模结构化数据处理的计算能力,满足不断增长的数据存储和处理的需求。【专利说明】一种基于关系型数据库的海量结构化数据的存储方法【
技术领域
】[0001]本发明涉及计算机【
技术领域
】,尤其涉及一种基于关系型数据库的海量结构化数据的存储方法。【
背景技术
】[0002]在现有技术中,对于海量结构化数据实现存储与计算,主要有以下两种方案:一、RDBMS(关系型数据库管理系统)的网格计算技术;二、以Hadoop(分布式文件系统)为基础的大数据技术。[0003]其中,RDBMS网格计算是把一个需要非常巨大的计算机能力才能解决的问题分成许多小的部分,然后把这些部分分配非许多计算机进行处理,最后把这些计算结果综合起来得到最终结果。以Oracle数据库为例,OracleRAC是Oracle数据库支持网格计算环境的核心技术,OracleRAC全称为RealApplicat1nCluster,即真正应用集群。RAC中所有服务器都可以直接访问数据库中的所有数据,其他数据库在开放系统中都做不到这点,用户可以非常方便地根据需求随时增加服务器来扩充系统,无需重新分布数据和应用。RAC像一个单一的系统工作,任何节点的故障都不会影响其他节点对数据的访问。[0004]而以分布式文件系统为基础的大数据技术,采用分布式处理的软件框架,允许采用多个廉价硬件设备构建大型集群,对海量数据进行处理。如Hive的一个数据仓库工具,用来进行数据提取转化加载(ETL)。Hive定义了简单的类SQL查询语言,允许熟悉SQL的用户查询数据,同也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以自由的组织Hive中的表,对数据库中的数据进行处理。[0005]但是,RDBMS的网格计算的应用系统在数据量出现海量增加时,无法满足用户要求。随着数据的增大,硬件的扩展空间有限,数据增加到足够大的数量级后,因为硬盘的输入/输出的瓶颈使得处理海量数据时效率非常低。而分布式文件系统的并行处理可以满足不断增加的数据存储和处理,但是在对标准SQL的兼容性上存在差距,用户可通过简单SQL查询数据,但复杂处理时需要用户撰写自定义函数来实现,因此对技术人员的要求比较高,而且将SQL转化为MapReduce以解决复杂的数据处理,该工程量巨大,实际工作成本高。【
发明内容】[0006]为了解决上述技术问题,本发明实施例提出一种基于关系型数据库的海量结构化数据的存储方法,采用本技术方案在无需对原有RDBMS应用系统做大修改的前提下,提高大规模结构化数据处理的计算能力,满足不断增长的数据存储和处理的需求。[0007]本发明实施例提供了一种基于关系型数据库的海量结构化数据的存储方法,包括:[0008]A、接收客户端发送数据处理的SQL语句,分析所述SQL语句的语法结构;[0009]B、根据所述语法结构,读取需操作表的元数据信息;[0010]C、根据所述元数据信息中的分布规则生成各工作节点的执行计划;[0011]D、通过消息对列的方式将各执行计划发送给各工作节点;[0012]E、通过消息对列的方式接收各工作节点的执行结果,其中,所述执行结果为工作节点在自身数据库上执行其收到的执行计划,将需存储的数据存储到关系型数据库而获得的结果;[0013]F、将各工作节点的执行结果汇总,结合事务处理获得事务执行结果,并将所述事务执行结果发送给客户端。[0014]进一步的,所述元数据信息包括:需操作表的类型、表名、备注信息、存储所述需操作表的各工作节点信息以及所述各工作节点的分布规则。[0015]进一步的,所述步骤C具体为:[0016]Cl、获取所述元数据信息中的各工作节点的分布规则;[0017]C2、提取某一工作节点中所有的分布规则表达式,创建此工作节点的SQL操作语句,依次将所述分布规则表达式拼接在所述SQL操作语句后面,获得包含所有分布规则的SQL操作语句;[0018]C3、创建该工作节点的执行计划,将所述包含所有分布规则的SQL操作语句存储在所述工作节点的执行计划中,并根据所述工作节点的节点名对该执行计划进行命名;[0019]C4、重复C2至C3的步骤,直到将元数据信息中分布规则的所有工作节点都处理完成,获得各工作节点的执行计划;[0020]C5、创建需操作表的执行计划,将各工作节点的执行计划存入所述需操作表的执行计划中,并采用所述元数据信息中的表名对所述需操作表的执行计划进行命名。[0021]进一步的,所述步骤D具体为:解析各工作节点的执行计划,获取各工作节点的节点名,根据所述节点名,将各工作节点的执行计划以消息对列的方式发送给各工作节点,并记录各执行计划的发送状态。[0022]进一步的,所述执行结果包括:执行结果标识、工作节点标识、执行状态以及状态描述。[0023]进一步的,所述步骤F具体为:将各工作节点的执行结果中的执行状态汇总,如果任一工作节点的执行状态为执行失败,则向各工作节点发送回滚消息,使各工作节点回滚事务,取消数据更新操作;如果各工作节点的执行状态均为执行成功,则向各工作节点发送提交消息,使各工作节点提交事务,完成数据更新操作;[0024]在向各工作节点发送回滚消息或提交消息后,结合事务处理获得事务执行结果,并将事务执行结果发送给用户,所述事务执行结果包含各工作节点的执行结果中的状态描述。[0025]由上可见,实施本发明实施例,具有如下有益效果:[0026]本发明实施例提供的海量结构化数据的存储方法,客户端的用户采用标准的SQL语句对数据处理进行写入,管理节点分析SQL语句的语法结构并读取需操作表的元数据信息。根据元数据信息中的分布规则生成各工作节点的执行计划,并通过消息对列的方式将各执行计划发送给各工作节点,以供各工作节点进行数据处理和数据更新。各工作节点执行相应的执行计划后,将执行结果反馈给管理节点,管理节点根据各执行结果,执行相应的事务操作处理,该事务操作处理为递交或回滚,并将事务执行结果发送给客户端。相比于现有技术RDMB无法满足大规模增长的数据容量和处理以及Hive对操作人员需要高的问题,本发明仅需使用SQL语句即能实现数据的复杂处理,而且采用多工作节点进行存储与处理,将一个事务操作拆分由多个工作节点进行处理和存储。在无需对原有RDBMS应用系统做大修改的前提下,提高大规模结构化数据处理的计算能力,满足不断增长的数据存储和处理的需求。[0027]进一步的,各工作节点将自身的执行结果反馈给管理节点,管理节点将各结果汇总,若任一工作节点执行失败,则回滚事务,否则递交并完成事务操作,保证了事务执行的完整性。【专利附图】【附图说明】[0028]图1是本发明提供的一种基于关系型数据库的海量结构化数据的存储方法的流程不意图;[0029]图2是本发明提供的步骤C的可选流程示意图;[0030]图3为本发明提供的各器件之间的信息交互示意图。【具体实施方式】[0031]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0032]参见图1,是本发明提供的一种基于关系型数据库的海量结构化数据的存储方法的流程示意图,该方法包括以下步骤:[0033]步骤A:接收客户端发送数据处理的SQL语句,分析所述SQL语句的语法结构。[0034]在本实施例中,用户通过客户端向管理节点发送SQL语句,实现对需操作数据的处理。管理节点在接收SQL语句后,语法解析器分析该SQL语句的语法结构。[0035]步骤B:根据该语法结构,读取需操作表的元数据信息。[0036]在本实例中,针对结构化数据量过大的情况,采用将一个表切割成多分份存储到多个Worker节点的方式进行,也允许一个表的数据在多个节点进行存储,避免出现在多个节点之间进行多表关联查询的问题。而一张表记录如何分布存储到各个工作节点,是由存储的分布规则决定的。分布规则有两类,一类是按顺序分布存储,另一类按表达式规则分布存储。[0037]其中,顺序分布存储是指当一个表在第一个工作节点的记录存储一定数量后,后续的数据会存到下一点工作节点。而按表达式规则分布是指当某个字段或几个字段的值符合相应的条件时,存入指定的工作节点。[0038]在本实施例中,具体是根据分析获得的语法结构,获取需操作的表信息,再根据表信息,读取相应的元数据信息。元数据信息包括:一个表的列类型、列的长度、表名、备注信息、存储该表的各工作节点信息以及各工作节点的分布规则。[0039]步骤C:根据所述元数据信息中的分布规则生成各工作节点的执行计划。[0040]在本实施例中,从元数据信息中取出存储的分布规则,一个表的分布规则以一个JOSN格式(JavaScriptObjectNotat1n,—种轻量级的数据交换格式)的字符串记录。[0041]参见图2,图2是本步骤的具体实施步骤,具体如下[0042]Cl、获取所述元数据信息中的各工作节点的分布规则。[0043]C2、提取某一工作节点中所有的分布规则表达式,创建此工作节点的SQL操作语句,依次将该分布规则表达式拼接在该SQL操作语句后面,获得包含所有分布规则的SQL操作语句。[0044]C3、创建该工作节点的执行计划,将包含所有分布规则的SQL操作语句存储在此工作节点的执行计划中,并根据工作节点的节点名对该执行计划进行命名。[0045]C4、重复C2至C3的步骤,直到将元数据信息中分布规则的所有工作节点都处理完成,获得各工作节点的执行计划;[0046]C5、创建需操作表的执行计划,将各工作节点的执行计划存入所述需操作表的执行计划中,并采用所述元数据信息中的表名对所述需操作表的执行计划进行命名。[0047]为了更好的描述步骤的实现方法,以下为本步骤的一个举例。需操作表的分布规则由JOSN格式的字符串记录,格式如下:[0048]{"tablcNamc":"tablcnamc","rule":[{"nodcid":"node","details"^jMficldNamc":"cxprcss1n!!|,!"ficldNamcM:"cxprcss1n,!!]},{!!nodcid":"node”,"detailsr,:[I,!ficldNamc":"cxprcss1n'!\,^'ficldNamc^^^Xprcss1n"!]}]}[0049]在上述格式中,tableName节点包含表名,即说明是哪个表的分布规则。rule节点由η条数据组成,每个数据表示一个工作节点的分布规则,包括nodeid节点和details节点。nodeid节点包含工作节点的标识。details节点包含分布规则详细信息,其中,fileldName是表的字段名,express1n用一个关系表达式来描述,合起来说明字段的分布规则。[0050]为了方便描述,假设已建立下表中的各变量[0051]ID~[Hpi1jsonlJSON对象元数据定义的分布规则2plan—nodeJSON对象某个工作节点的执行计划3^JSON对象数组~各个工作节点的执行计划4json2JSON对象一个表最终的执行计划[0052]本步骤的举例具体如下:[0053]1、从分布规则jsonl中取出第一个工作节点(nodeid)信息,加入plan_node变量。[0054]2、取出分布规则中第一个工作节点中的第一个字段的分布规则表达式,作为客户输入的原始SQL的子条件,创建此工作节点的SQL操作语句。[0055]3、循环2过程,直到将此工作节点的所有字段的表达式都拼接到此工作节点的SQL操作语句后面,形成一个包含了所有分布规则的新的SQL操作语句。[0056]4、以〃SQL〃作为键名,过程3形成的SQL操作语句作为值,存入plan_node变量。[0057]5、将过程4生成的plan_node对象存入plan数组。[0058]6、重复2至5的过程,直到将分布规则中的所有工作节点的信息都处理完成。此时,形成包括所有工作节点的plan数组。[0059]7、取出plan数组中的第η(η=I)个元素作为plan_node_l,取出plan数组中的第n+1个兀素作为plan_node_2。[0060]8、将plan_node_l中〃sql〃键的值,存入plan_node_2中作为〃bak_data_sql"的值。[0061]9、重复7、8过程,直到n=m_l(m为plan数据中元素的个数)。[0062]10、将plan数组中第m个元素的〃sql"键的值,存入到plan数组中的第I个元素中作为〃bak_data_sql〃的值。[0063]11、以〃plan〃为键名,将处理后的plan对象为值存入json2。[0064]12、从分布规则jsonl中取出表名节点(tableName节点)的值存入json2中。[0065]经过上述步骤,形成了最终的执行计划。最终执行计划以一个JOSN格式的记录,格式如下(数据格式2):[0066]{"tableName":"tablcnamc",Hplan":[{"nodeid":"node","scil'Vsqlexpress1n","bakdatasql":"sqlexpress1n"},{"nodeid":"node","sqr':"sqlexpress1n","bakdatasql":"sqlexpress1n"}]}[0067]步骤D:通过消息对列的方式将各执行计划发送给各工作节点。[0068]在本实施例中,步骤D具体为:管理节点解析各工作节点的执行计划,获取各工作节点的节点名,根据该节点名,将各工作节点的执行计划以消息对列的方式发送给各工作节点,并记录各执行计划的发送状态。参照上述举例,管理节点查找plan节点中的nodeid值,将执行计划中的Plan节点下对应的一条数据,以消息对列的方式发送到对应的工作节点。每个工作节点发送成功后,状态标记为I,表示发送成功。[0069]步骤E:通过消息对列的方式接收各工作节点的执行结果,其中,执行结果为工作节点在自身数据库上执行其收到的执行计划,将需存储的数据存储到关系型数据库而获得的结果。[0070]在本实施例中,参照上述举例,工作节点在收到执行计划中plan节点的一条数据,对其进行解析,取出SQL操作语句,连接到本地的关系型数据库并开始执行,以事务方式进行数据操作。在工作节点完成数据操作后,会生成一个执行结果。该执行结果包括:执行结果标识、工作节点标识、执行状态以及状态描述。该执行结果标识为唯一标记号,数值为开始执行时间,格式为“yyMMddhhmmss+4位毫秒数”,共16位数字。该工作节点标识用于标明是哪个工作节点。该执行状态为执行计划的完成状态,成功则状态标记为O,失败则状态标记为2。该状态描述包括空或失败原因的详细信息,如果执行成功,则为空,如果执行失败,则为失败原因的详细信息。[0071]步骤F:将各工作节点的执行结果汇总,结合事务处理获得事务执行结果,并将所述事务执行结果发送给客户端。[0072]在管理节点收到所有工作节点的执行结果,判断各执行结果是否执行成功,即判断执行状态是否为O。如果一个或多个工作节点的执行状态标记为2,则向各工作节点发送回滚消息,使各工作节点回滚事务,取消数据更新操作。如果各工作节点的执行状态标记均为0,则向各工作节点发送提交消息,使各工作节点提交事务,完成数据更新操作。[0073]在向各工作节点发送回滚消息或提交消息后,管理节点结合事务处理获得事务执行结果,并将事务执行结果发送给用户。该事务执行结果包含各工作节点的执行结果中的状态描述,用于告知用户该事务的执行情况。[0074]为了更好的说明本发明的整体实现过程,参见图3,图3为本发明提供的各器件之间的信息交互示意图。其中,其主要包含客户端、管理节点和多个工作节点。[0075]由上可见,本发明实施例提供的海量结构化数据的存储方法,客户端的用户采用标准的SQL语句对数据处理进行写入,管理节点分析SQL语句的语法结构并读取需操作表的元数据信息。根据元数据信息中的分布规则生成各工作节点的执行计划,并通过消息对列的方式将各执行计划发送给各工作节点,以供各工作节点进行数据处理和数据更新。各工作节点执行相应的执行计划后,将执行结果反馈给管理节点,管理节点根据各执行结果,执行相应的事务操作处理,该事务操作处理为递交或回滚,并将事务执行结果发送给客户端。相比于现有技术RDMB无法满足大规模增长的数据容量和处理以及Hive对操作人员需要高的问题,本发明仅需使用SQL语句即能实现数据的复杂处理,而且采用多工作节点进行存储与处理,将一个事务操作拆分由多个工作节点进行处理和存储。在无需对原有RDBMS应用系统做大修改的前提下,提高大规模结构化数据处理的计算能力,满足不断增长的数据存储和处理的需求。[0076]进一步的,各工作节点将自身的执行结果反馈给管理节点,管理节点将各结果汇总,若任一工作节点执行失败,则回滚事务,否则递交并完成事务操作,保证了事务执行的完整性。[0077]另外,本方法采用分布式存储和计算,通过增加服务器的方式,适应不断增长的数据存储和处理的需要,完全满足海量数据的性能要求,扩展性良好。同时,由于业务数据采用传统的RDBMS进行存储和处理,因此传统的RDBMS的优势仍然完全保留,对结构化的关系型数据的支持度较高,与原有的应用系统完全兼容,易用性良好。[0078]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。[0079]以上所述是本发明的优选实施方式,应当指出,对于本【
技术领域
】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。【权利要求】1.一种基于关系型数据库的海量结构化数据的存储方法,其特征在于,包括:A、接收客户端发送数据处理的SQL语句,分析所述SQL语句的语法结构;B、根据所述语法结构,读取需操作表的元数据信息;C、根据所述元数据信息中的分布规则生成各工作节点的执行计划;D、通过消息对列的方式将各执行计划发送给各工作节点;E、通过消息对列的方式接收各工作节点的执行结果,其中,所述执行结果为工作节点在自身数据库上执行其收到的执行计划,将需存储的数据存储到关系型数据库而获得的结果;F、将各工作节点的执行结果汇总,结合事务处理获得事务执行结果,并将所述事务执行结果发送给客户端。2.根据权利要求1所述的存储方法,其特征在于,所述元数据信息包括:需操作表的类型、表名、备注信息、存储所述需操作表的各工作节点信息以及所述各工作节点的分布规则。3.根据权利要求1或2所述的存储方法,其特征在于,所述步骤C具体为:Cl、获取所述元数据信息中的各工作节点的分布规则;C2、提取某一工作节点中所有的分布规则表达式,创建此工作节点的SQL操作语句,依次将所述分布规则表达式拼接在所述SQL操作语句后面,获得包含所有分布规则的SQL操作语句;C3、创建该工作节点的执行计划,将所述包含所有分布规则的SQL操作语句存储在所述工作节点的执行计划中,并根据所述工作节点的节点名对该执行计划进行命名;C4、重复C2至C3的步骤,直到将元数据信息中分布规则的所有工作节点都处理完成,获得各工作节点的执行计划;C5、创建需操作表的执行计划,将各工作节点的执行计划存入所述需操作表的执行计划中,并采用所述元数据信息中的表名对所述需操作表的执行计划进行命名。4.根据权利要求1所述的存储方法,其特征在于,所述步骤D具体为:解析各工作节点的执行计划,获取各工作节点的节点名,根据所述节点名,将各工作节点的执行计划以消息对列的方式发送给各工作节点,并记录各执行计划的发送状态。5.根据权利要求1所述的存储方法,其特征在于,所述执行结果包括:执行结果标识、工作节点标识、执行状态以及状态描述。6.根据权利要求5所述的存储方法,其特征在于,所述步骤F具体为:将各工作节点的执行结果中的执行状态汇总,如果任一工作节点的执行状态为执行失败,则向各工作节点发送回滚消息,使各工作节点回滚事务,取消数据更新操作;如果各工作节点的执行状态均为执行成功,则向各工作节点发送提交消息,使各工作节点提交事务,完成数据更新操作;在向各工作节点发送回滚消息或提交消息后,结合事务处理获得事务执行结果,并将事务执行结果发送给用户,所述事务执行结果包含各工作节点的执行结果中的状态描述。【文档编号】G06F17/30GK104133891SQ201410370692【公开日】2014年11月5日申请日期:2014年7月30日优先权日:2014年7月30日【发明者】李爱民,陈承志,龙庆麟,梁国辉,熊道勇申请人:广州科腾信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1