从多数据库引擎获取数据的装置和方法

文档序号:6372321阅读:165来源:国知局

专利名称::从多数据库引擎获取数据的装置和方法
技术领域
:本发明涉及数据库
技术领域
,具体而言,涉及一种从多数据库引擎获取数据的装置和一种从多数据库引擎获取数据的方法。
背景技术
:ERP系统是一类功能庞大而复杂的大型应用系统,其中存在许多复杂的业务计算。这类系统通常都是基于大型关系数据库系统的,应用系统中的业务计算有很大的部分是由数据库执行的,数据库系统的性能将直接决定ERP系统的性能。但是随着时间的推移,系统中的数据越来越多,系统的性能也随之严重下降。作为单数据库引擎的系统,参见图1A,由于读写操作都集中在一个数据库系统中,无法做到转移压力提升性能。当发生此类情况时需要使用多数据库引擎,将数据库压力分配到多个数据库系统中,以提升系统性能的伸缩性。目前应用多数据库引擎的方法一般有两种。一种是按照应用模块或应用场景分配数据库引擎。例如,将普通单据操作的SQL应用于数据库引擎A,报表查询等操作应用于数据库引擎B,参见图1B。这类方案应用粒度只能局限于某种特定应用,无法适应系统细粒度请求分配的要求。另一种方法是在发出SQL的模块指定固定的数据库引擎,根据不同的数据库引擎需要进行特定的语法转换,这种方法的代码耦合度非常大代码修改效率很差。因此,需要一种从多数据库引擎获取数据的方法,可以高效细粒度地分配SQL请求到多个数据库引擎执行,提高ERP系统的工作效率。
发明内容针对上述问题,本发明提供了一种从多数据库引擎获取数据的方法及相关装置,可以高效细粒度地分配SQL请求到多个数据库引擎执行,提高ERP系统的工作效率。根据本发明的一个方面,提出了一种从多数据库引擎获取数据的装置,包括接收单元,接收执行SQL语句的请求;查询单元,查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;数据库引擎分配单元,如果所述查询单元查询到所述SQL语句已记录在所述文件中,将所述SQL语句分配到所述SQL对应的数据库引擎执行所述SQL语句。在该技术方案中,可以对每个不同的SQL语句指定由哪个数据库引擎来执行,由此可以实现将SQL请求细粒度地分配到多个数据库引擎执行,将数据库引擎负担的压力合理分配到多个数据库引擎上,避免各种不同类的SQL请求因为争用服务器资源造成系统性能低下。优选地,所述数据库引擎分配单元还用于如果所述查询单元查询到所述SQL语句未记录在所述文件中,将所述SQL语句分配到默认的数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以由系统默认的数据库引擎执行。优选地,所述数据库引擎分配单元还用于如果所述查询单元查询到所述SQL语句未记录在所述文件中,随机分配一个数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以采用动态分配的方式,随机分配一个数据库引擎来执行该SQL。优选地,该装置还包括记录单元,将所述SQL语句与所述随机分配的数据库引擎对应存储到所述文件中。在该技术方案中,对于预设文件中没有记录的SQL语句由随机分配的数据库引擎执行后,可以将该SQL语句与对应的数据库引擎记录在该文件中,在下次有相同的SQL请求时还分配到这个数据库引擎来执行。优选地,所述查询单元从指定路径获取所述文件;以及所述数据库引擎分配单元还用于,在所述指定路径中不存在所述文件时,将所述SQL语句分配到默认的数据库引擎执行;或者,随机分配一个数据库引擎执行所述SQL语句。在该技术方案中,预设文件存储在指定路径中,如果在该路径中无法获得该文件,则通过默认数据库引擎执行或随机指定数据库引擎执行SQL请求,并且可以在相关界面中对用户进行提示,提醒用户创建并配置该文件。本发明还提出一种从多数据库引擎获取数据的方法,包括接收执行SQL语句的请求;查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;如果所述SQL语句已记录在所述文件中,通过所述SQL对应的数据库引擎执行所述SQL语句。在该技术方案中,可以对每个不同的SQL语句指定由哪个数据库引擎来执行,由此可以实现将SQL请求细粒度地分配到多个数据库引擎执行,将数据库引擎负担的压力合理分配到多个数据库引擎上,避免各种不同类的SQL请求因为争用服务器资源造成系统性能低下。优选地,还包括如果所述SQL语句未记录在所述文件中,通过默认的数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以由系统默认的数据库引擎执行。优选地,还包括如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以采用动态分配的方式,随机分配一个数据库引擎来执行该SQL。优选地,在所述如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句之后还包括将所述SQL语句与所述随机分配的数据库引擎对应存储到所述文件中。在该技术方案中,对于预设文件中没有记录的SQL语句由随机分配的数据库引擎执行后,可以将该SQL语句与对应的数据库引擎记录在该文件中,在下次有相同的SQL请求时还分配到这个数据库引擎来执行。优选地,在所述查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎之前还包括从指定路径获取所述文件;若所述指定路径中不存在所述文件,则通过默认的数据库引擎执行所述SQL语句;或者,随机分配一个数据库引擎,通过随机分配的数据库引擎执行所述SQL语句。在该技术方案中,预设文件存储在指定路径中,如果在该路径中无法获得该文件,则通过默认数据库引擎执行或随机指定数据库引擎执行SQL请求,并且可以在相关界面中对用户进行提示,提醒用户创建并配置该文件。通过上述技术方案,可以高效细粒度地分配SQL请求到多个数据库引擎执行,提高ERP系统的工作效率。图IA和图IB示出了相关技术中从多数据库引擎获取数据的示意图;图2示出了根据本发明的实施例的从多数据库引擎获取数据的装置的示意图;图3示出了根据本发明的一个实施例的从多数据库引擎获取数据的方法的流程图;图4示出了根据本发明的另一实施例的从多数据库引擎获取数据的方法的流程图。具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围不受下面公开的具体实施例的限制。下面结合附图和实施例对本发明做进一步说明。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。图2示出了根据本发明的实施例的从多数据库引擎获取数据的装置的示意图。如图2所示,根据本发明的实施例的从多数据库引擎获取数据的装置100包括接收单元102,接收执行SQL语句的请求;查询单元104,查询SQL语句是否记录在预设的文件中,文件记录了多个SQL语句及其对应的多个数据库引擎;数据库引擎分配单元106,如果查询单元104查询到SQL语句已记录在文件中,将SQL语句分配到SQL对应的数据库引擎执行SQL语句。在该技术方案中,可以对每个不同的SQL语句指定由哪个数据库引擎来执行,由此可以实现将SQL请求细粒度地分配到多个数据库引擎执行,将数据库引擎负担的压力合理分配到多个数据库引擎上,避免各种不同类的SQL请求因为争用服务器资源造成系统性能低下。优选地,数据库引擎分配单元106还用于如果查询单元104查询到SQL语句未记录在文件中,将SQL语句分配到默认的数据库引擎执行SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以由系统默认的数据库引擎执行。优选地,数据库引擎分配单元106还用于如果查询单元104查询到SQL语句未记录在文件中,随机分配一个数据库引擎执行SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以采用动态分配的方式,随机分配一个数据库引擎来执行该SQL。优选地,该装置100还包括记录单元108,将SQL语句与随机分配的数据库引擎对应存储到文件中。在该技术方案中,对于预设文件中没有记录的SQL语句由随机分配的数据库引擎执行后,可以将该SQL语句与对应的数据库引擎记录在该文件中,在下次有相同的SQL请求时还分配到这个数据库引擎来执行。优选地,查询单元104从指定路径获取文件;以及数据库引擎分配单元106还用于,在指定路径中不存在文件时,将SQL语句分配到默认的数据库引擎执行;或者,随机分配一个数据库引擎执行SQL语句。图3示出了根据本发明的一个实施例的从多数据库引擎获取数据的方法的流程图。如图3所示,根据本发明的一个实施例的从多数据库引擎获取数据的方法,包括步骤202,接收执行SQL语句的请求;步骤204,查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;步骤206,如果所述SQL语句已记录在所述文件中,通过所述SQL对应的数据库引擎执行所述SQL语句。在该技术方案中,可以对每个不同的SQL语句指定由哪个数据库引擎来执行,由此可以实现将SQL请求细粒度地分配到多个数据库引擎执行,将数据库引擎负担的压力合理分配到多个数据库引擎上,避免各种不同类的SQL请求因为争用服务器资源造成系统性能低下。优选地,还包括如果所述SQL语句未记录在所述文件中,通过默认的数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以由系统默认的数据库引擎执行。优选地,还包括如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句。在该技术方案中,预设文件中没有记录的SQL语句不需要在指定数据库引擎中执行。对不需要在指定数据库引擎中执行的SQL请求,可以采用动态分配的方式,随机分配一个数据库引擎来执行该SQL。优选地,在所述如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句之后还包括将所述SQL语句与所述随机分配的数据库引擎对应存储到所述文件中。在该技术方案中,对于预设文件中没有记录的SQL语句由随机分配的数据库引擎执行后,可以将该SQL语句与对应的数据库引擎记录在该文件中,在下次有相同的SQL请求时还分配到这个数据库引擎来执行。优选地,在所述查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎之前还包括从指定路径获取所述文件;若所述指定路径中不存在所述文件,则通过默认的数据库引擎执行所述SQL语句;或者,随机分配一个数据库引擎,通过随机分配的数据库引擎执行所述SQL语句。在该技术方案中,预设文件存储在指定路径中,如果在该路径中无法获得该文件,则通过默认数据库引擎执行或随机指定数据库引擎执行SQL请求,并且可以在相关界面中对用户进行提示,提醒用户创建并配置该文件。图4示出了根据本发明的另一实施例的从多数据库引擎获取数据的方法的流程图。如图4所示,根据本发明的另一实施例的从多数据库引擎获取数据的方法包括以下步骤步骤302,接收SQL请求;步骤304,判断字典文件中是否存有该SQL语句,字典文件中存有需要在指定数据库引擎执行的SQL语句和其对应的数据库引擎名;步骤306,在步骤304中判断结果为存在时,创建该SQL与其指定的数据库引擎的连接;步骤308,在步骤304中判断结果为不存在时,创建该SQL与默认数据库引擎的连接;步骤310,执行该SQL。下面详细描述每个步骤的具体做法该算法可以由任何高级编程语言(例如Java、C#等)和符合ANSI标准的数据库管理系统(例如0racle、DB2、SQLServer等)实现。首先创建字典文件,在字典文件中定义需要在指定引擎执行的SQL语句。创建一个字典文件,填写需要在指定引擎中执行的SQL语句。该文件可以是文本文件或XML等格式的文件。字典内容格式#数据库引擎I#在数据库引擎I上执行的SQLl#在数据库引擎I上执行的SQL2…#数据库引擎2#在数据库引擎2上执行的SQLl#在数据库引擎2上执行的SQL2…上面“数据库引擎I”和“数据库引擎2”对应两个数据库引擎的缩写名,每个缩写名下定义的SQL语句将在该数据库引擎中执行。没有在字典文件中定义的SQL将在默认数据库引擎中执行。当接收到SQL请求时,判断SQL请求是否已经在字典中定义。首先判断SQL字典文件是否存在于文件系统的指定路径中,如果不存在将返回文件不存在标志,在默认数据库引擎执行该SQL请求,或随机分配一个数据库引擎来执行SQL。如果SQL字典文件存在,将判断SQL字典文件是否已经读取到内存的特定缓存区中,如果不存在将读取文件内容并缓存在特定缓存区中。在特定缓冲区中查找需要执行的SQL语句,如果查找到将返回该SQL对应的数据库引擎名;反之将返回默认数据库引擎名,或随机分配一个数据库引擎来执行SQL。需要注意的是,本实施例的内容字典文件并非仅根据用户行为制定,同时,在将某SQL随机分配给一个数据库引擎执行后,将该SQL与该数据库引擎记录到字典文件中,即可自动生成字典文件的内容。接下来,创建数据库连接执行SQL语句。根据返回的数据库引擎名,构建该数据库引擎对应的连接字符串,使用该连接字符串创建数据库连接对象。最后使用该数据库连接对象执行SQL语句。本发明的三个主要算法已经说明完毕,接下来我们通过一个例子来介绍各算法是如何工作的。在一个存在三个数据库引擎的系统中(在默认数据库引擎上执行的SQL不需要在字典中定义),字典文件定义如下丑oracleI^select:columnI,co!umn2fromtableI#seiectcoIumn3,colinnn6fromtable2wherecolumn2=#sybasefQl^select:column6fromtabIe6#seiectcount(*)fromtable#selectcolumn3,count(*)fromtable4wherecolumnI=groupbycolumn3前端应用程序发出SQL请求selectcolumn3,column6fromtable2wherecolumn2=678在执行该SQL前,程序首先在字典文件中查找。在数据库引擎名为oraclel的SQL定义中找到了该SQL,因此创建了指向数据库引擎oraclel的数据库连接执行SQL请求。综上,根据本发明的技术方案,可以高效细粒度地分配SQL请求到多个数据库引擎执行,提高ERP系统的工作效率。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种从多数据库引擎获取数据的装置,其特征在于,包括接收单元,接收执行SQL语句的请求;查询单元,查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;数据库引擎分配单元,如果所述查询单元查询到所述SQL语句已记录在所述文件中,将所述SQL语句分配到所述SQL对应的数据库引擎执行所述SQL语句。2.根据权利要求I所述的从多数据库引擎获取数据的装置,其特征在于,所述数据库引擎分配单元还用于如果所述查询单元查询到所述SQL语句未记录在所述文件中,将所述SQL语句分配到默认的数据库引擎执行所述SQL语句。3.根据权利要求I所述的从多数据库引擎获取数据的装置,其特征在于,所述数据库引擎分配单元还用于如果所述查询单元查询到所述SQL语句未记录在所述文件中,随机分配一个数据库引擎执行所述SQL语句。4.根据权利要求3所述的从多数据库引擎获取数据的装置,其特征在于,还包括记录单元,将所述SQL语句与所述随机分配的数据库引擎对应存储到所述文件中。5.根据权利要求I至4中任一项所述的从多数据库引擎获取数据的装置,其特征在于,所述查询单元从指定路径获取所述文件;以及所述数据库引擎分配单元还用于,在所述指定路径中不存在所述文件时,将所述SQL语句分配到默认的数据库引擎执行;或者,随机分配一个数据库引擎执行所述SQL语句。6.一种从多数据库引擎获取数据的方法,其特征在于,包括接收执行SQL语句的请求;查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;如果所述SQL语句已记录在所述文件中,通过所述SQL对应的数据库引擎执行所述SQL语句。7.根据权利要求6所述的从多数据库引擎获取数据的方法,其特征在于,还包括如果所述SQL语句未记录在所述文件中,通过默认的数据库引擎执行所述SQL语句。8.根据权利要求6所述的从多数据库引擎获取数据的方法,其特征在于,还包括如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句。9.根据权利要求8所述的从多数据库引擎获取数据的方法,其特征在于,在所述如果所述SQL语句未记录在所述文件中,随机分配一个数据库引擎,通过所述随机分配的数据库引擎执行所述SQL语句之后还包括将所述SQL语句与所述随机分配的数据库引擎对应存储到所述文件中。10.根据权利要求6至9中任一项所述的从多数据库引擎获取数据的方法,其特征在于,在所述查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎之前还包括从指定路径获取所述文件;若所述指定路径中不存在所述文件,则通过默认的数据库引擎执行所述SQL语句;或者,随机分配一个数据库引擎,通过随机分配的数据库引擎执行所述SQL语句。全文摘要本发明提供了一种从多数据库引擎获取数据的装置,包括接收单元,接收执行SQL语句的请求;查询单元,查询所述SQL语句是否记录在预设的文件中,所述文件记录了多个SQL语句及其对应的多个数据库引擎;数据库引擎分配单元,如果所述查询单元查询到所述SQL语句已记录在所述文件中,将所述SQL语句分配到所述SQL对应的数据库引擎执行所述SQL语句。本发明还提出一种从多数据库引擎获取数据的方法。通过本发明的技术方案,可以高效细粒度地分配SQL请求到多个数据库引擎执行,提高ERP系统的工作效率。文档编号G06F17/30GK102750384SQ201210219598公开日2012年10月24日申请日期2012年6月28日优先权日2012年6月28日发明者刘建波,刘智宇,黄卫申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1