处理数据库操作请求的系统的制作方法

文档序号:6383068阅读:172来源:国知局

专利名称::处理数据库操作请求的系统的制作方法
技术领域
:本发明涉及数据库技术,尤其涉及一种处理数据库操作请求的系统。
背景技术
:在计算机时代,出现了专门用于存储、管理数据的数据库系统,而且数据库系统在网络应用上日益普及。一般来说,数据库系统中会包括一个或者多个数据库,专门用于存储某个应用的数据。在关系型数据库中,数据一般分布在多张数据表中,每张数据表存在某个方面的数据。例如在一个常用的网络应用的数据库中,有一张数据表存储用户的基本信息,有另一张数据表存储用户的登录信息等。随着时代的发展和技术的进步,目前人类社会每天产生的数据量相当惊人,海量数据造成关系型数据库(例如诸如MySQL)的数据表容量越来越大,一张表的条目(记录)数可达几千万甚至上亿条。数据库在对数据表进行处理时,需要锁表、操作、解锁等几个阶段,一张数据表的记录数过多,会造成很多操作同时等待解锁,造成数据库处理大型数据表时显得力不从心,性能下降严重。为了提高数据库操作数据表的性能,有必要将逻辑上的一张较大的表拆分成物理上的多张较小的子表。最常见的分表方案是在表结构里设置一个特殊的字段,以下称其为分表字段,其类型一般为整数,也可能为字符串等等。不同的记录根据分表字段值的不同,使用哈希等方式,将分表字段值与某个编号的子表关联。此方案最大的缺点是需要应用编写人员自己控制数据与具体的子表之间的对应关系,应用编写人员必须对数据库底层子表的实现方式非常了解,在编写具体的业务逻辑的同时,还要分心于逻辑表与物理子表的关系处理上,开发效率受到严重影响。其次,此方案的分表策略定得过于死板,不够灵活。如果要调整子表数量或是修改分表字段值与子表序号的对应关系,则应用编写人员必须也对代码作出相应修改,才能使应用在新的分表架构上正确运行,应用系统的维护成本很高。
发明内容鉴于上述问题,提出了本发明,以便提供一种克服上述问题或者至少部分地解决上述问题的分配数据库操作请求的系统。依据本发明,提供了一种处理数据库操作请求的系统,包括处理数据库操作请求的设备;一个或者多个应用服务器,适于向该设备发送对于数据库的操作请求;以及数据库服务器,适于向该设备提供该分表信息,并且接收该设备发送的修改后的操作请求;其中,所述处理数据库操作请求的设备包括应用程序接口,适于从应用服务器接收对于数据库的操作请求;解析器,适于解析该操作请求,以获取该操作请求中的第一数据表名,并且根据分表信息解析该操作请求,以获取该操作请求中与该第一数据表名相关联的分表字段以及与该分表字段相对应的字段值,其中该分表信息包括要进行分表的数据表的数据表名以及与该数据表名相关联的分表字段;操作请求修改器,适于根据该分表信息和所获取的分表字段相对应的字段值,将该操作请求中的第一数据表名修改为第二数据表名;以及数据库接口,适于将修改后的操作请求发送给数据库服务器。可选地,在根据本发明的实施例的处理数据库操作请求的系统中,如果该操作请求中不存在第一数据表名,则该数据库接口将该操作请求发送给数据库服务器。可选地,在根据本发明的实施例的处理数据库操作请求的系统中,在该解析器根据分表信息解析操作请求时,如果该第一数据表名不在该分表信息中,则该数据库接口将该操作请求发送给数据库服务器;如果该第一数据表名在该分表信息中、但该解析器未从该操作请求中解析出与该第一数据表名相关联的分表字段及该分表字段相对应的字段值,则返回错误提示。可选地,在根据本发明的实施例的处理数据库操作请求的系统中,该分表信息还包括要进行分表的数据表的子表数量,该操作请求修改器根据与该分表字段相对应的字段值以及该数据表的子表数量,将该第一数据表名修改为第二数据表名。本发明提供了上述处理数据库操作请求的系统。根据本发明的实施例,根据来自数据库服务器的分表信息,解析应用服务器对于数据库的操作请求,以获取第一数据表名、与其相关联的分表字段以及字段值,并且根据该分表信息和字段值将第一数据表名修改为第二数据表名,并将修改后的操作请求发送给数据库服务器。由此,使得分表的过程对应用服务透明化,应用编写人员不再需要控制数据与具体的子表之间的对应关系,无论物理上存在多少张子表,应用编写人员所面对的是始终是逻辑上的一张表,应用编写人员不再需要关心数据库分表策略的实现细节,可以专注于编写具体的业务代码,只需在对于数据库的操作请求中包含分表字段的值即可。另外,根据本发明的实施例,通过更新分表信息,可以避免子表数量等分表信息的变化对应用代码的影响,应用只需要开发一次,不再需要由于数据库分表信息的调整而修改应用程序本身,极大地降低了维护成本。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中图1是根据本发明的实施例的处理数据库操作请求的方法的流程图;图2是根据本发明的一个实施例的处理数据库操作请求的方法各步骤的流程图;以及图3是根据本发明的实施例的处理数据库操作请求的设备以及系统的框图。具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示意性地图示了根据本发明的实施例的处理数据库操作请求的方法的流程图,并且图2示意性地图示了根据本发明的一个实施例的处理数据库操作请求的方法各步骤的流程图。下面将接合图1和图2对本发明进行详细的描述。根据本发明的实施例,数据库例如可以是MySQL数据库。在下文中,以MySQL数据库为例,对本发明的原理进行描述,然而,这只是为了示例的目的,本发明的范围并不限于此,本发明的原理同样适用于其它类型的数据库,例如IBMDB2,Oracle10等数据库。如图1所示,根据本发明的实施例的处理数据库操作请求的方法100适于步骤S101,其中,接收对于数据库的操作请求。该对于数据库的操作请求例如来自于一个或者多个应用服务器。同样参见图2,首先,可以存储来自例如一个或者多个数据库服务器的分表信息。根据本发明的实施例,该分表信息可以包括要进行分表的数据表的数据表名以及与该数据表名相关联的分表字段。接下来,在步骤SlOl中,从一个或者多个应用服务器接收对于数据库的操作请求,如果没有接收到,则继续等待;如果已经接收到,则进入下一步骤,即图1所示的步骤S103。根据本发明的实施例,该操作请求可以包括数据库程序语言语句。可选地,该数据库程序语言语句可以是SQL(StructuredQueryLanguage,结构化查询语言)语句。然而,SQL语言和SQL语句仅为示例,用于帮助读者理解本发明的原理,本发明的范围并不限于此,而是同样适用于其它适当的数据库程序语言和相对应的语句。在步骤S103中,解析该操作请求,以获取该操作请求中的第一数据表名(例如table)。此时,如果该操作请求中不存在第一数据表名(例如不存在table),则说明该操作请求不是针对某张表的操作,那么就可以将操作请求直接发送给数据库服务器。而如果操作请求中存在第一数据表名,则执行如图1所示的步骤S105,其中,根据分表信息解析该操作请求,以获取该操作请求中与第一数据表名相关联的分表字段以及与该分表字段相对应的字段值。例如,假设将数据表table拆分为100张子表,分别称为table_0、table_l、…、table_99,整数型字段id被设置为分表字段。此时,如果操作请求中所包括的SQL语句为SELECT*FR0MtableWHEREname=“zhangsan”ANDid=123,则操作请求中与第一数据表名table相关联的分表字段为id,与该分表字段相对应的字段值为123。在步骤S105中,如果第一数据表名不在分表信息中,则说明第一数据表名所代表的数据表未被拆分为多张分表,那么就可以直接将操作请求发送给数据库服务器。而如果第一数据表名在该分表信息中、但未从操作请求中解析出与第一数据表名相关联的分表字段及该分表字段相对应的字段值,则无法判断该操作请求是针对哪张子表进行操作,就可以返回错误提示,例如,向应用服务器返回“操作请求错误,未包含分表字段”的错误提示。接下来,执行步骤S107,其中,根据分表信息和所获取的分表字段相对应的字段值,将操作请求中的第一数据表名修改为第二数据表名。根据本发明的实施例,分表信息还可以包括要进行分表的数据表的子表数量,在步骤S107中,可以根据与分表字段相对应的字段值以及数据表的子表数量,将第一数据表名修改为第二数据表名。根据本发明的实施例,第二数据表名对应于第一数据表分表之后生成的多个第二数据表之一,其包括第一数据表名以及第二数据表标识。例如,仍以上述SQL语句SELECT*FR0MtableWHEREname=“zhangsan”ANDid=123为例进行描述。根据与分表字段相对应的字段值123以及数据表的子表数量100,可以采用求模方式的分表策略,即,123对100求模,得到23,则说明该SQL语句实际是要对子表table_23进行操作,第二数据表名即为table_23,包括第一数据表名table以及第二数据表标识23,从而可以将操作请求中的SQL语句修改为SELECT*FR0Mtable_23WHEREname=“zhangsan”ANDid=123,即,从子表table_23中选择“zhangsan”字段进行操作。之后,如图1所示,执行步骤S109,将修改后的操作请求发送给数据库服务器。例如,将包括修改后的SQL语句SELECT*FR0Mtable_23WHEREname=“zhangsan”ANDid=123的操作请求发送给数据库服务器。根据本发明的实施例,如图2所示,方法100还可以包括以下步骤检查分表信息是否已经更新(例如,子表数量变化,新拆分了某些表等),如果已更新,则在上述步骤SlOl之前,存储更新后的分表信息,并在步骤S105中,根据更新后的分表信息来解析操作请求。下面,为了帮助读者理解本发明,结合一个具体示例来说明本发明的原理。假设第一数据表名为person的数据表被分为10张子表,分表字段为pid,第一数据表名为student的数据表被分为100张子表,分表字段为no,则分表信息可以如下table[I]={person,10,pid},table[2]={student,100,no}。假设操作请求中包括的SQL语句为SELECT*FR0MpersonWHEREpid=123。首先,解析操作请求,获取第一数据表名person,然后根据分表信息解析得到分表字段pid以及与分表字段相对应的字段值123,将123对10求模,得到结果3。于是,就可以将原SQL语句中的第一数据表名person修改为第二数据表名person_3,然后将包括修改后的SQL语句SELECT*FR0Mperson_3WHEREpid=123的操作请求发送给数据库服务器来执行。另外,假设操作请求中包括的SQL语句为INSERTINTOstudent('no','name')VALUES(246,‘zhangsan’)。首先,解析操作请求,获取第一数据表名student,然后根据分表信息解析得到分表字段no以及与分表字段相对应的字段值,将246对100取模,得到结果46。于是,就可以将原SQL语句中的第一数据表名student修改为第二数据表名student_46,然后将包括修改后的SQL语句INSERTINTOstudent_46('no','name')VALUES(246,‘zhangsan’)的操作请求发送给数据库服务器来执行。本发明公开了一种处理数据库操作请求的方法。根据本发明的实施例,根据来自数据库服务器的分表信息,解析应用服务器对于数据库的操作请求,以获取第一数据表名、与其相关联的分表字段以及字段值,并且根据分表信息和字段值将第一数据表名修改为第二数据表名,并将修改后的操作请求发送给数据库服务器。由此,使得分表的过程对应用透明化,应用编写人员不再需要控制数据与具体的子表之间的对应关系,无论物理上存在多少张子表,应用编写人员所面对的是始终是逻辑上的一张表,应用编写人员不再需要关心数据库分表策略的实现细节,可以专注于编写具体的业务代码,只需在对于数据库的操作请求中包含分表字段的值即可。另外,根据本发明的实施例,通过更新分表信息,可以避免子表数量等分表信息的变化对应用的影响,应用只需要开发一次,不再需要由于数据库分表信息的调整而修改应用本身,极大地降低了维护成本。与上述方法100相对应,本发明还提供了一种处理数据库操作请求的设备200。图3示意性地图示了根据本发明的实施例的处理数据库操作请求的设备200。参见图3,设备200主要包括应用程序接口201、解析器203、操作请求修改器205、以及数据库接口207。根据本发明的实施例,应用接口201从应用服务器300-1到300_n接收对于数据库的操作请求。然后解析器203对应用接口201接收的操作请求进行解析,以获取操作请求中的第一数据表名,并且根据分表信息解析操作请求,以获取操作请求中与第一数据表名相关联的分表字段以及与该分表字段相对应的字段值。分表信息包括要进行分表的数据表的数据表名以及与该数据表名相关联的分表字段。例如,假设第一数据表名为person的数据表被分为10张子表,分表字段为pid,第一数据表名为student的数据表被分为100张子表,分表字段为no,则分表信息可以如下table[I]={person,10,pid},table[2]={student,100,no}。操作请求修改器205根据分表信息和解析器203所获取的分表字段相对应的字段值,将操作请求中的第一数据表名修改为第二数据表名。假设操作请求中包括的SQL语句为SELECT*FR0MpersonWHEREpid=123。解析器203获取的第一数据表名为person,与分表字段pid相对应的字段值123。操作请求修改器205将123对10求模,得到结果3。于是,操作请求修改器205就可以将原SQL语句中的第一数据表名person修改为第二数据表名person_3。数据库接口207将操作请求修改器205修改后的操作请求发送给数据库服务器。应用接口201可以用于执行上述处理数据库操作请求的方法100中的步骤S101,解析器203可以用于执行步骤S103和S105,操作请求修改器205可以用于执行步骤S107,数据库接口可以用于执行步骤S109。根据本发明的实施例,操作请求可以包括数据库程序语言语句。可选地,数据库程序语言语句可以是SQL语句,数据库可以是MySQL数据库。如上所述,SQL语句和MySQL数据库仅为本发明的示例,并不意在限制本发明。根据本发明的实施例,如果解析器203解析操作请求时、操作请求中不存在第一数据表名,则说明该操作请求不是针对某张表的操作,那么数据库接口207就可以将操作请求直接发送给数据库服务器。而在解析器203根据分表信息解析操作请求时,如果第一数据表名不在分表信息中,则说明第一数据表名所代表的数据表未被拆分为多张分表,那么数据库接口207就可以将操作请求发送给数据库服务器。如果第一数据表名在分表信息中、但解析器203未从操作请求中解析出与第一数据表名相关联的分表字段及该分表字段相对应的字段值,则返回错误提示,例如,向应用服务器300-1到300-n返回“操作请求错误,未包含分表字段”的错误提示。根据本发明的实施例,分表信息还包括要进行分表的数据表的子表数量,操作请求修改器205根据与分表字段相对应的字段值以及数据表的子表数量,将第一数据表名修改为第二数据表名,第二数据表名对应于第一数据表分表之后生成的多个第二数据表之一,其包括第一数据表名以及第二数据表标识。仍以上面针对方法100描述的SQL语句为例,可以将第一数据表名table修改为第二数据表名table_23,然后将包括修改后的SQL语句SELECT*FR0Mtable_23WHEREname=“zhangsan”ANDid=123的操作请求发送给数据库服务器。根据本发明的实施例,数据库接口207还可以检查分表信息是否已经更新(例如,子表数量变化,新拆分了某些表等),如果已更新,则存储更新后的分表信息,供解析器203用来解析操作请求。由于上述各设备实施例与前述各方法实施例相对应,因此不再对各设备实施例进行详细描述。根据本发明的又一方面,还提供了一种分配数据库操作请求的系统1000。参见图3,系统1000包括上述设备200;—个或者多个应用服务器300-1,…,300_n,适于向设备·200发送对于数据库的操作请求;以及数据库服务器400-1,…,400-n,适于向设备200提供分表信息,并且接收设备200发送的修改后的操作请求。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的装置中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个装置中。可以把实施例中的若干模块组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者模块中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个装置实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的系统中的一些或者全部模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。权利要求1.一种处理数据库操作请求的系统(1000),包括处理数据库操作请求的设备(200);一个或者多个应用服务器(300-1,…,300-n),适于向所述设备(200)发送对于数据库的操作请求;以及数据库服务器(400-1,…,400-n),适于向所述设备(200)提供所述分表信息,并且接收所述设备(200)发送的修改后的操作请求;其中,所述处理数据库操作请求的设备(200)包括应用程序接口(201),适于从应用服务器接收对于数据库的操作请求;解析器(203),适于解析所述操作请求,以获取所述操作请求中的第一数据表名,并且根据分表信息解析所述操作请求,以获取所述操作请求中与所述第一数据表名相关联的分表字段以及与该分表字段相对应的字段值,其中所述分表信息包括要进行分表的数据表的数据表名以及与该数据表名相关联的分表字段;操作请求修改器(205),适于根据所述分表信息和所获取的分表字段相对应的字段值,将所述操作请求中的第一数据表名修改为第二数据表名;以及数据库接口(207),适于将修改后的操作请求发送给数据库服务器。2.如权利要求1所述的系统,其中如果所述操作请求中不存在第一数据表名,则所述数据库接口(207)将所述操作请求发送给数据库服务器。3.如权利要求1或2所述的系统,其中在所述解析器(203)根据分表信息解析操作请求时,如果所述第一数据表名不在所述分表信息中,则所述数据库接口(207)将所述操作请求发送给数据库服务器;如果所述第一数据表名在所述分表信息中、但所述解析器(203)未从所述操作请求中解析出与所述第一数据表名相关联的分表字段及该分表字段相对应的字段值,则返回错误提示。4.如权利要求1至3中的任一项所述的系统,其中所述分表信息还包括要进行分表的数据表的子表数量,所述操作请求修改器(205)根据与所述分表字段相对应的字段值以及所述数据表的子表数量,将所述第一数据表名修改为第二数据表名。5.如权利要求1至4中的任一项所述的系统,其中所述第二数据表名对应于第一数据表分表之后生成的多个第二数据表之一,其包括第一数据表名以及第二数据表标识。6.如权利要求1至5中的任一项所述的系统,其中所述操作请求包括数据库程序语言语句。7.如权利要求6所述的系统,其中所述数据库程序语言语句是结构化查询语言SQL语句,所述数据库是MySQL数据库。全文摘要本发明公开了一种处理数据库操作请求的系统,其包括处理数据库操作请求的设备;一个或者多个应用服务器,适于向所述设备发送对于数据库的操作请求;以及数据库服务器,适于向所述设备提供所述分表信息,并且接收所述设备发送的修改后的操作请求;其中,所述处理数据库操作请求的设备包括应用程序接口;解析器;操作请求修改器;以及数据库接口。文档编号G06F17/30GK103020196SQ20121051119公开日2013年4月3日申请日期2012年12月3日优先权日2012年12月3日发明者朱超,陈超,桂勇哲,代兵,王超申请人:北京奇虎科技有限公司,奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1