数据库分区方法与系统的制作方法

文档序号:6577982阅读:156来源:国知局

专利名称::数据库分区方法与系统的制作方法
技术领域
:本发明总体上涉及数据库分区方法与系统,特别的本发明涉及一种动态的数据库分区方法与系统。
背景技术
:现有的数据库系统中,当用户应用(application)的数据被装载以后,随着用户业务的不断扩大,数据库中的数据可能会变的异常庞大。举个简单例子一个包含十年发票记录的表可能占据几百万行的数据空间,查询(query)这样一个表所耗费的时间完全无法满足用户的需要。为了提高查询的速度和效率,数据库分区技术应运而生。具体而言,数据库在一个非共享的环境中被分解为独立的分区,每个分区都具有自己的资源。数据通过哈希Hash算法均允地散列到不同的分区内,每个分区只负责处理自己的数据。当用户发出数据库查询语句SQL操作后,被连接的分区负责处理用户的请求。数据库分区的主要目的是为了提高数据并行处理性能,以及在特定的数据库查询操作中减少数据读写的总量以缩减响应时间。数据库分区可以是物理分区也可以是逻辑分区。在一台物理机器上部署的一个分区,被称为物理分区,如果是在一台多处理系统(SymmetricMultiProcessing,简称SMP)机器上部署多个分区,这些分区被称为逻辑分区。数据库可以选择物理分区,也可以选择逻辑分区。通常,如果决定采用大的SMP机器,有更多的CPU、内存及硬盘,数据库会采用逻辑分区;如果决定采用多台物理机器,数据库会通过非共享的体系结构采用物理分区;如果决定采用多台SMP机器,数据库则会采用物理分区和逻辑分区结合的方式。数据库分区技术可以具备两大优点,其一是带来数据库性能的提升(Increasedperformance),继续上面的例子,一个占据了几百万行的数据的发票记录,利用数据库分区技术,可以被分为十个不同的分区,每个分区包含的是其中一年的记录。百万行的表划分为10个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了。其二,数据库分区技术可以实现对数据管理的简化(Simplifieddatamanagement),分区技术可以让数据库的管理员利用其丰富的数据库管理经验提升数据的管理能力。通过优良的分区,管理员可以简化特定数据操作的执行方式。对一个数据库应用的管理员而言,只要数据库供应商划分了分区,或者在初始配置时,由数据库应用的开发人员按照数据库应用的管理员的指示进行了分区,数据库应用的管理员在后续的数据库操作时往往没有能力对数据分区规则进行主动修改。数据库供应商所提供的初始化分区方法往往仅支持基于哈希表的分区,这样的分区方案与应用数据完全无关——比如,无法实现上文的例子中的按年的分区方按,缺少分区的灵活度。所以很多数据库使用者更倾向于在数据库初始化分区时,编写应用程序代码,以实现数据库分区。然而通过编写程序代码实现数据分区修改起来比较复杂,数据库的使用者往往需要通过应用程序的开发人员来修改代码才能修改其分区方案。但是基于业务的应用(transactionbasedapplications)越来越普及。对于大多数数据库应用而言,管理员很可能无法在一开始设计出有利的初始化分区方案。其结果是,随着业务的不断发展和数据量的不断提升,数据库系统的响应时间将会越来越慢,用户体验难以令人接受。在一些实际应用中,近期数据的查询率可能会远远高于历史数据的查询率。数据库管理员在一开始设定的分区规则——比如2009年以后的数据和2009年以前的数据被放置在不同的两个分区上——随着时间的改变也需要加以更新——比如一年以后将分界年由2009年修改为2010年,即2010年以后的数据和2010年以前的数据被放置在不同的两个分区上。可见,现有技术虽然提供了数据库分区技术,但是很难在不改变应用程序代码的情况下,实现灵活的数据分区。
发明内容为了解决现有技术中的问题,本发明提供了一种灵活、动态的数据库分区技术。本发明主要利用在数据库的数据表中插入数据分区键值的方法,以将符合特定数据分区规则的数据条目存储到特定的分区上,从而实现可更新,可随意定制的数据库分区方案。通过本发明,数据库使用者可以在不改变应用程序代码的前提下,动态的对数据库中的数据进行分区或者重新分区。这样,数据库使用者可以以最低的成本实现灵活的数据管理,同时大大提升数据库的查询速度和效率。需要说明的是,本发明并不特别限定分区的方式是逻辑分区还是物理分区,实际上本发明既适用于逻辑分区的数据库也适用于物理分区的数据库。具体而言,本发明提供了一种对数据库中的数据进行分区的方法,所述方法包括获取数据分区规则,所述数据分区规则用于指示数据分区条件与分区的对应关系;基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区条件与数据分区键值的对应关系;按照数据分区条件与数据分区键值的对应关系对数据库中的数据条目添加对应的数据分区键值;以及根据数据条目的数据分区键值将数据条目存储到数据库中的对应分区。本发明还提供了一种数据库查询方法,所述数据库中的数据已经按照上述在数据库中进行分区的方法进行了分区,该数据库查询方法包括获得数据查询请求;解析数据查询请求;判断所述数据查询请求是否与至少一个分区相匹配;响应于所述数据查询请求与至少一个分区相匹配的判断,查找与该数据查询请求对应的分区键值;对数据查询请求进行处理以将将该分区键值添加到所述数据查询请求中;以及向数据库发送处理过的数据查询请求。本发明还提供了一种对数据库中的数据进行分区的系统,所述系统包括获取数据分区规则的装置,所述数据分区规则用于指示数据分区条件与分区的对应关系;基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区条件与数据分区键值的对应关系的装置;按照数据分区条件与数据分区键值的对应关系对数据库中的数据条目添加对应的数据分区键值的装置;以及根据数据条目的数据分区键值,将数据条目存储到数据库中的对应分区的装置。。本发明还提供了一种数据库查询系统,所述数据库中的数据由上述在数据库中进行数据分区的系统进行了分区,所述数据库查询系统包括获得数据查询请求的装置;解析数据查询请求;判断所述数据查询请求是否与至少一个分区相匹配的装置;响应于所述数据查询请求与至少一个分区相匹配的判断,查找与该数据查询请求对应的分区键值的装置;对数据查询请求进行处理以将将该分区键值添加到所述数据查询请求中的装置;以及向数据库发送处理过的数据查询请求的装置。上述描述大致列举了本发明的优越之处,通过结合附图与本发明最佳实施例的详细说明,本发明的这些以及其它优点将更加明显。本说明中所参考的附图只用于示例本发明的典型实施例,不应该认为是对本发明范围的限制。图1是对数据库中的数据进行分区的方法流程图。图2是为支持数据分区的数据库预先计算与分区对应的数据分区键值的流程图。图3是为不支持数据分区的数据库定义数据分区键值的流程图。图4是批量添加分区键值的流程图。图5是逐个添加分区键值的流程图。图6是对数据库中的数据条目进行处理的流程图。图7是基于动态的数据库分区技术,进行数据库查询的流程图。图8是在数据库中对数据进行分区的系统框图。图9是基于动态的数据库分区技术,进行数据库查询的数据库查询系统的系统框图。具体实施例方式下列讨论中,提供大量具体的细节以帮助彻底了解本发明。然而,很显然对于本领域技术人员来说,即使没有这些具体细节,并不影响对本发明的理解。并且应该认识到,使用如下的任何具体术语仅仅是为了方便描述,因此,本发明不应当局限于只用在这样的术语所标识和/或暗示的任何特定应用中。除非另有说明,本发明所述的功能可用硬件或软件或它们的结合来运行。然而,在一优选实施列中,除非另有说明,这些功能是由处理器,如计算机或电子数据处理器,按照编码,如计算机程序编码,的集成电路来执行的。一般来说,为了实现本发明的实施例而执行的方法可以是操作系统或特定应用程序的一部分、程序、模块、对象或指令序列。本发明的软件通常包括将由本地计算机呈现成机器可读格式的众多指令,因此是可执行指令。此外,程序包括相对于程序来说驻留在本地或在存储器中找到的变量和数据结构。另外,下文描述的各种程序可以根据在本发明的特定实施例中实现它们的应用方法来识别。当携带指向本发明的功能的计算机可读指令时,这样的信号承载媒体代表本发明的实施例。图1是对数据库中的数据进行分区的方法流程图。在步骤101中获取数据分区规则,所述数据分区规则用于指示数据分区条件与数据分区的对应关系。按照本发明的一个实施例,所述数据分区规则按照数据库中数据的查询频率进行定义,即把经常会被查询的数据放到一个数据分区上,并且把不经常被查询的历史数据放到其它的数据分区上。数据分区规则可以是数据库应用的系统管理员根据自己对于数据查询的经验和对于数据分区的了解而定义的,也可以是根据一定的反馈机制自动定义的(关于反馈机制将在后文中进行更加详细的描述)。下面以一个简单的例子进行说明。如下面表1所示,假设一个数据库应用中仅存储了一张名为Sales^rder的表,该表反映了产品的销售状况。该表中的列值包括Id,Custermer_id,Product,Year,Status。其中Status所表示的数据值包括三种running,finished,以及canceled。表1系统管理员对数据库中的数据的查询状态具备一定的经验,他知道最经常被查询的数据是当年的数据,即2009年以后的数据或者虽然该数据在2009年以前产生,但是其Status值还处于Running状态。正如上文中提到的,系统管理员在一开始未必能够定义出最合适的数据分区规则,随着数据查询量的增长,系统管理员可以逐步优化其数据分区规则。假设系统管理员希望将数据分为三个分区P0,P1和P2。在一种实施例中,系统管理员需要创建三个分区(图中未示出),比如在新数据装载时,创建三个新的分区;在另一种实施例中,系统管理员需要对已有分区进行更新,比如已有两个分区PO和P1,系统管理员需要增加一个新的分区P2;当然,在一种实施例中,系统管理员可以不对数据分区进行改变,比如已有的分区就是P0,P1和P2,系统管理员并不打算修改已有的分区,而是希望修改已有的数据分区规则,使得数据库中的数据条目按照新的分区规则在三个分区中重新进行分配。在表2中,系统管理员将相关分区条件和具体分区进行对应,从而形成分区规则。需要说明的是本发明并不试图保护任何具体的分区策略,因为这些策略完全取决于数据库应用本身的特性。本发明对此进行描述仅仅是为了说明本发明的应用场景。表2回到附图1,字母A表示本发明中可选的获得每个分区对应的数据分区键值的具体步骤将在后文中进行更加详细的说明。在步骤103,基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区规则与数据分区键值(PK)的对应关系。所述对应关系可以被记录在匹配表中。本领域的普通技术人员理解,对于支持分区的数据库而言,每一个分区都对应至少一个数据分区键值。数据分区键值可以灵活地控制将数据存储在分区中的哪个位置。本步骤利用数据分区键值标识对应的分区,从而通过数据分区键值将数据分区规则与相关分区相对应。有关数据分区键值的取得过程将在下文中进行更加详细的描述。在本发明的一个实施例中P0对应的PK为3690,P1对应的PK为3712,P2对应的PK为2730。表3示出了记录数据分区条件与数据分区键值的对应关系的匹配表。具体而言,表3可以被实现为表3-1或表3-2。其中表3-1用取值范围表示各个参数,而表3-2使用更详细的列举的方式表示各个参数。在本发明的一个实施例中,一个PK仅与一个分区相对应。而本领域的普通技术人员理解,实际上也可由多个PK对应一个分区。表3-1表3-2回到附图1,字母B表示可选的对数据库中的数据条目进行处理的流程将在后文中进行详细的描述。接下来,在步骤105,按照数据分区规则对数据库中的数据条目添加对应的数据分区键值。添加数据分区键值可以通过在数据库的表中添加新的一列值来完成。具体的步骤将在下文中进行更加详细的描述。表4示出了添加了对应的分区键值的数据条目的表。表4附图1中,与步骤105相关联的字母C表示添加数据分区键值的具体步骤将在后文中进行详细的描述。在步骤107中,根据数据条目的数据分区键值将数据条目存储到数据库中的对应分区。比如,对于表4中Id为1的数据条目,由于添加了数据分区键值2730,所述数据条目将被存储到分区P2中。相似的,Id为2的数据条目也将被存储到分区P2中,Id为3的数据条目将被存储到分区P0中,Id为4的数据条目将被存储到分区P1中,以此类推,直到所有的数据条目都迁移到指定的分区。当新的数据条目要被加入到数据库中时,可以按照步骤105中的方法,对其添加PK值,从而将其定位到指定的分区。因此,虽然上文中以对已经装载的数据进行数据迁移为例进行说明,但是本发明并非仅限于现存数据的数据迁移,本发明同样可以适用于按照数据分区规则装载新的数据。图2是为支持数据分区的数据库预先计算与分区对应的数据分区键值的流程图。现有技术中的数据库分区技术通常都是通过Hash算法将数据均允地散列到不同的分区内,每个分区只负责处理自己的数据。然而,对于大部分数据库而言,由于Hash算法并不公开,所以数据库应用的用户并不知道某个分区所对应的数据分区键值是多少,例如,用户并不知道具体使用什么数据分区键值可以把某条数据分配到P0上。因此需要对与各个分区对应的数据分区键值进行预先计算。具体而言,在步骤203,在数据库中创建一张表。所述表为一张空表,其列值用于存储数据分区键值。创建所述空表可以通过下述语句实现Createtabletablel(collBIGINT)DISTRIBUTEBYHASH(coll)该语句表示在空表tablel中有一个列coll,其用于存储整形数据。在步骤205,将至少一个数据分区键值插入到所述表中。所述数据分区键值可以是一个随机数,比如任意一个1000-9999的整数,如3690。在空表中插入随机数的目的就是为了测试该随机数所对应的分区。将分区键值插入到所述空表中可以通过下述语句实现Insertintotable1values(3690);Insertintotablelvalues(3712);Insertintotablelvalues(2730)该语句表示向空表中插入各个值。在步骤207,查询与所述数据分区键值(3690,3712,2730)对应的分区号,以确定所述数据分区键值与所述分区号的对应关系。具体而言,该步骤通过查询含有特定数据分区键值(如之前任意挑选的随机数)的记录会被分配到哪一个分区中来确定所述数据分区键值与所述分区号的对应关系。该步骤可以通过下述语句实现Selectcoll,dbpartitionnum(coll)fromtablelwherecoll=2730该语句表示返回tablel中数据分区键值为2730所对应的分区号。相似的,该步骤也可以通过查询插入的所有数据分区键值分别对应的分区号来实现。实现语句如下Selectcoll,dbpartitionnum(coll)fromtablel该语句表示返回tablel中所有数据分区键值所对应的分区号。按照上面的实施例,插入3690作为分区键值后,得到的分区号为0,插入3712作为分区号后,得到的分区号为1,插入2730后得到的分区号为2。由于插入随机数后,并不确定将会返回哪一个分区号,有可能连续插入多个随机数后,都返回同一个分区号。所以,在本发明的一种实施例中,需要重复上述步骤205和207直到得到所有分区所对应的至少一个数据分区键值(图中未示出),也就是说至少找到一个与PO对应的数据分区键值,一个与Pl对应的数据分区键值,一个与P2对应的数据分区键值,从而建立如表5所示的分区与数据分区键值映射表(图中未示出)。表5需要说明的是,利用2中的方法,可能找到多个与同一分区号对应的分区键值,如分区键值4623也对应于分区号0。按照本发明的一个实施例,仅仅使用对应于某一分区号的一个分区键值就可以了。与图2中描述的不同,图3是为不支持数据分区的数据库定义数据分区键值的流程图。目前市场上大型的数据库产品大都支持数据分区,比如DB2,Oracle,以及MySQL的高于5.1的版本。然而仍然存在一部分小型数据库产品并不提供分区功能,当然其也不允许通过数据分区键值,控制数据存储的分区。为了在不支持数据分区的数据库上实现本发明的数据分区功能,可以将每个不支持分区的数据库看成一个分区,从而进行数据分区。具体而言,在步骤301,为多个数据库定义多个分区号,以将一个数据库作为一个分区。在步骤303,定义数据分区键值,使得所述每一个数据分区键值与一个分区号相对应,从而构建如表6所示的分区与数据分区键值映射表(图中未示出)。在一种简单的实施例中,数据分区键值与分区号相同。表6图1示意性的将图2或图3中所示的技术方案布置在步骤101“获取数据分区规则”之后。本领域的普通技术人员理解,建立分区与数据分区键值映射表,只要在建立数据分区规则与数据分区键值的对应关系之前进行就可以,而不必一定安排在“获取数据分区规则”之后。图4是批量添加数据分区键值的流程图。在步骤401中,按照数据分区条件制定数据查询语句。比如按照数据分区规则R1查询所有符合分区条件“Year<2009andStatus=finished”的数据条目。在步骤403中获得与该数据分区条件对应的所有数据条目。在步骤405中,查询匹配表(表3)以获得该数据分区条件对应的数据分区键值,比如R1对应的数据分区键值3690。在步骤407对所获得的与该数据分区条件对应的所有数据条目统一添加数据分区键值,添加了数据分区键值的数据库中的表可参见下述表7。在步骤409,返回到图1中的步骤105。表7-1分区P0中的数据表表7-2分区P1中的数据表表7-3分区P2中的数据表作为本发明的另外一种实施方式,图5是逐个添加数据分区键值的流程图。在步骤501逐一读取数据库中的数据条目。在步骤503分析所述数据条目所对应的数据分区条件。在步骤505查询匹配表以获得所述数据条目对应的数据分区键值。在步骤507,将所述数据分区键值添加到数据条目中,从而形成如表7中的各个数据表。在步骤509,返回到图1中的步骤105。高速缓存cache是一个高速小容量的临时存储器,可以用高速的静态存储器芯片实现,或者集成到CPU芯片内部,存储CPU最经常访问的指令或者操作数据。Cache中的内容随命中率的降低需要经常替换新的内容。按照本发明中的一个实施例,可以借助cache保存匹配表以提高后续数据查找的速度。数据库中的数据条目的列值可能与数据分区条件的参数的数据格式一致。从而匹配表中的参数可以直接用于判断某个数据条目是否符合某一分区规则。然而,数据库中的数据条目的列值并不总是与数据分区条件的参数的数据格式一致。举一个简单的例子,在数据分区规则中,分区条件的一个参数为年,如“2002”,而在实际的数据库表中,可能存储着更为详细的日期数据作为列值,如“2002.10.1”。这样数据库中数据条目的列值就与分区条件的参数的数据格式存在一定的不一致性。这时需要对数据条目进行一定的处理。图6是对数据库中的数据条目进行处理的流程图。在步骤601中,首先扫描数据条目的列值。在步骤603,判断所述列值中存储的数据格式是否与数据分区条件中对应参数的数据格式一致。当格式一致时,在步骤607返回。当格式不一致时,在步骤605对所述数据条目的列值进行处理以标识其与数据分区条件中对应参数一致的数据格式,比如对“2002.10.1”进行处理,以标识其相应的Year值为“2002”,并在步骤607返回。可以直接利用经处理的数据条目所标识的Year值在后续的步骤中判断应该对该数据条目添加哪个分区键值。图7是基于动态的数据库分区技术,进行数据库查询的流程图。在步骤701中,获得数据查询请求,例如数据查询请求1为Select^fromSales_orderwhereYear=2005andStatus='Finished'数据查询请求1在步骤703中,解析数据查询请求。所述解析用于确定数据查询请求中的列值。例如数据查询请求1的列值为Year=2005以及Status=,Finished,。在步骤705,判断所述数据查询请求是否与至少一个分区相匹配?数据查询请求与一个分区相匹配就意味着查询请求可以通过仅查询一个分区而进行。很显然,数据查询请求1符合数据分区规则R1,因此与分区P0相匹配。但是在实际情况中,并非所有的数据查询请求都能与一个分区相匹配,例如下面的数据查询请求2就无法与任何分区相匹配Select^fromSales_orderwhereProduct=‘电视’数据查询请求2在实际数据查询中,数据查询请求也并非只能与一个数据分区相匹配,例如下面的数据查询请求就与P0和P2都匹配Select^fromSales_orderwhereYear>2005andStatus='Finished'数据查询请求3数据查询请求3由于可以被看作1)Year>=2009和2)Year<2009,year>2005并且Status=,Finished'两部分的集合,因此其可以与R4和R1两个分区规则所中的分区P2和P0相匹配。本领域的普通技术人员理解,当数据查询请求所匹配的分区为所有数据库中的分区时,也就相当于数据查询请求无法与任何一个分区相匹配,例如下面的数据查询请求Select^fromSales_orderwhereYear>2005数据查询请求4在步骤707,响应于所述数据查询请求与至少一个分区相匹配的判断,查找与该数据查询请求对应的数据分区键值。该步骤可以通过查询上述匹配表(表3)进行。例如,查找到上述数据查询请求1的数据分区键值应当是3690,上述数据查询请求3的数据分区键值应当是3690和2730。在步骤709,对数据查询请求进行处理以将该数据分区键值添加到所述数据查询请求中。例如,将数据查询请求1修改为Select氺fromSales_orderwhereYear=2005andStatus=jFinihsec^andPK=3690将数据查询请求3修改为Select氺fromSales_orderwhereYear>2005andStatus=jFinishec^andPK=3690,2730在步骤711,向数据库发送数据查询请求。对于查询请求与至少一个数据分区相匹配的情形,向数据库发送的数据查询请求是添加了数据分区键值的查询请求。这样数据库仅需要在相应的匹配的分区中进行检索,而不必对所有分区进行检索。对于查询请求与任何一个数据分区都不相匹配的情形,向数据库发送的数据查询请求是没有添加分区键值的查询请求,即原始的查询请求。这样数据库需要对所有的分区进行检索。可选的,在步骤713,记录数据库查询的相关信息作为反馈信息。反馈信息可以有助于判断当前设置的数据分区规则是否合理,并且可以用于推荐合理的数据分区规则以优化数据库查询性能。在实际中,一般的数据库应用,如果没有在设计的时候仔细考虑,系统管理员是比较难于直接确定出最理想的数据分区规则的。因此,反馈信息可以帮助系统管理员校正其初始的分区规则设计。具体而言,所述反馈信息至少包含下列各项之一数据查询语句中的数据查询条件,如whereYear=2005andStatus=,Finished,,按照该查询条件从数据库返回的数据条目的数量,返回所述数据条目的响应时间,以及实际查询的分区。可以根据反馈信息了解哪些是经常被查询的数据,哪些是不经常被查询的数据。在步骤713,对所述反馈信息进行统计。所述统计至少包含下列各项之一统计相同数据查询条件的数据查询语句,统计各个数据查询条件所命中的数据条目,统计各个数据查询条件所命中的数据条目的响应时间,统计各个分区被实际查询的次数。图8是在数据库中对数据进行分区的系统框图。在数据库中进行数据分区的系统801包括数据分区规则获取装置803,数据分区规则与数据分区键值对应关系建立装置805,数据条目的数据分区键值添加装置807,数据条目存储装置809。具体而言,数据分区规则获取装置803用于获取数据分区规则,所述数据分区规则的结构可以参见上述表2。可选的,装置803可以从手动输入装置815获取人为定制的数据分区规则,或者也可以从反馈信息统计装置817处获得数据分区规则。反馈信息统计装置817将对数据库查询的反馈信息进行统计,并且可以更新或创建数据分区规则。数据分区规则与数据分区键值对应关系建立装置805用于基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区规则与数据分区键值对应关系。所述对应关系可以被记录在匹配表中,所述匹配表被存储在元数据存储器811中。具体而言,通过确定如上述表5或表6中的数据分区键值与分区的对应关系,以及如上述表2中的数据分区规则与分区的对应关系,可以建立如上述表3中的数据分区规则与数据分区键值的关系,进而通过数据分区键值确定符合特定条件的数据应当被存储的分区。数据条目的数据分区键值添加装置807用于按照数据分区规则对数据库中的数据条目添加对应的数据分区键值。所述数据分区键值可以作为新的列值从而对数据库中的表进行扩展。数据条目存储装置809用于根据数据条目的数据分区键值将数据条目存储到数据库813中的对应分区位置。所存储的添加了数据分区键值的数据条目可以参见上述表7。可选的,本发明中的数据库813中的分区可以配置不同的物理资源。给予某些分区更为优惠的物理资源可以进一步提高该分区上的查询效率。比如本发明中,很少被查询的历史数据被存储在P0和P1两个分区上,而近期的或经常有可能被查询的数据被存储在P2上,因此,可以为P2配置更优的物理资源,如cpu、磁盘、内存等,使其具有相对于其它分区而言,具有更快的I/O速度和更快的处理能力,从而进一步提高P2上的查询效率。图9是基于动态的数据库分区技术,进行数据库查询的数据库查询系统的系统框图。所述数据库查询系统901包括数据查询请求获得装置903,数据查询请求解析装置905,数据查询请求与数据分区的匹配判断装置907,数据分区键值查找装置909,数据查询请求的数据分区键值添加装置911,数据查询请求发送装置913。可选的,本发明还包括反馈信息记录装置915,反馈信息统计装置917。具体而言,数据查询请求获得装置903用于通过用户界面获得用户所输入的数据查询请求。数据查询请求解析装置905用于对数据查询请求进行解析,获取其中的列值。查询请求与数据分区的匹配判断装置907用于通过解析到的数据查询请求的列值,以及数据分区规则判断所述数据查询请求是否与至少一个分区相匹配,也就是所述数据查询请求是否可以通过查询至少一个分区而非所有分区而得到。数据分区键值查找装置909响应于所述判断装置做出数据查询请求与至少一个分区相匹配的判断,查找与该数据查询请求对应的数据分区键值,具体而言所述查找装置909可以通过查找存储在元数据存储器919中的匹配表(表3)从而获得对应的数据分区键值。数据查询请求的数据分区键值添加装置911用于将查找到的数据分区键值添加到所述数据查询请求中。数据查询请求发送装置913用于向数据库921发送数据查询请求,对于数据查询请求与至少一个分区相匹配的情形,所述发送装置913用于向数据库发送添加了数据分区键值的数据查询请求。这样数据库仅需要在相应的匹配的分区中进行检索,而不必对所有分区进行检索。对于数据查询请求与任何一个分区都不相匹配的情形,即响应于上述判断装置907做出数据查询请求与任何一个分区都不匹配的判断,发送装置913向数据库发送的数据查询请求是没有添加数据分区键值的查询请求,即原始的查询请求。这样数据库可能在所有的分区进行检索。反馈信息记录装置915用于记录数据库查询的反馈信息。反馈信息统计装置917用于对所述反馈信息进行统计。本领域的普通技术人员理解,上述各个操作过程可以由存储在计算机程序产品中的可执行程序实现。该程序产品定义各实施例的功能,并承载各种信号,包括(但不局限于)1)永久存储在不可擦写存储媒体上的信息;2)存储在可擦写存储媒体上的信息;或3)通过包括无线通信在内的通信媒体(如,通过计算机网络或电话网络)传送到计算机上的信息,特别是包括从因特网和其它网络下载的信息。本发明的各种实施例可以提供许多优点,包括已经在
发明内容中列举的,和能够从技术方案本身推导出来的。但是无论一个实施例是否取得全部优点,并且也无论这样的优点是否被认为是取得实质性提高,都不应构成对本发明的限制。同时,上文中提到的各种实施方式,仅仅是出于说明的目的,本领域的普通技术人员可以对上述实施方式做出各种修改和变更,而不偏离本发明的实质。本发明的范围完全由所附权利要求书限定。权利要求一种对数据库中的数据进行分区的方法,所述方法包括获取数据分区规则,所述数据分区规则用于指示数据分区条件与分区的对应关系;基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区条件与数据分区键值的对应关系;按照数据分区条件与数据分区键值的对应关系对数据库中的数据条目添加对应的数据分区键值;以及根据数据条目的数据分区键值将数据条目存储到数据库中的对应分区。2.如前述权利要求1所述的方法,其中建立数据分区条件与数据分区键值的对应关系的步骤进一步包括将所述数据分区条件与数据分区键值的对应关系记录在匹配表中。3.如前述权利要求2所述的方法,其中所述添加对应的数据分区键值的步骤进一步包括按照所述数据分区条件制定数据查询语句;获得与所述数据分区条件对应的数据条目;查询所述匹配表以获得所述数据分区条件对应的数据分区键值;以及对所获得的与所述数据分区条件对应的数据条目添加数据分区键值。4.如前述权利要求2所述的方法,其中所述添加对应的数据分区键值的步骤进一步包括逐一读取数据库中的数据条目;分析所述数据条目所对应的数据分区条件;查询所述匹配表以获得所述数据条目对应的数据分区键值;以及将所述数据分区键值添加到数据条目中。5.如前述权利要求2所述的方法,其中所述匹配表被存储在高速缓存中。6.如前述权利要求1-5之一所述的方法,其中所述数据库为支持分区的数据库,所述方法进一步还包括预先计算数据分区键值,其中每个数据分区键值与一个分区号相对应,所述预先计算数据分区键值的步骤进一步包括在数据库中创建一张表;将至少一个数据分区键值插入到所述表中;查询与所插入的数据分区键值对应的分区号,以确定所述数据分区键值与所述分区号的对应关系。7.如前述权利要求1-5之一所述的方法,其中所述数据库为不支持分区的数据库,所述方法还包括为多个数据库定义多个分区号,以将一个数据库作为一个分区,以及定义数据分区键值,使得所述每个数据分区键值与一个分区号相对应。8.如前述权利要求1-7之一所述的方法,还包括获得新的要被加入到数据库中的数据条目;按照数据分区条件对数据库中的数据条目添加对应的数据分区键值;以及将添加了对应的数据分区键值的数据条目存储到数据库中的对应分区。9.一种数据库查询方法,所述数据库中的数据按照权利要求1所述的方法进行了分区,该数据库查询方法包括获得数据查询请求;解析数据查询请求;判断所述数据查询请求是否与至少一个分区相匹配;响应于所述数据查询请求与至少一个分区相匹配的判断,查找与所述数据查询请求对应的数据分区键值;对数据查询请求进行处理以将将该分区键值添加到所述数据查询请求中;以及向数据库发送处理过的数据查询请求。10.如前述权利要求9所述的方法,还包括响应于所述数据查询请求与任何一个分区都不相匹配的判断,向数据库发送没有添加数据分区键值的数据查询请求。11.如前述权利要求9或10所述的方法,还包括记录数据库查询的相关信息作为反馈信息,所述反馈信息至少包含下列各项之一数据查询语句中的数据查询条件,按照所述数据查询条件从数据库返回的数据条目的数量,返回所述数据条目的响应时间,实际查询的分区。12.一种对数据库中的数据进行分区的系统,所述系统包括获取数据分区规则的装置,所述数据分区规则用于指示数据分区条件与分区的对应关系;基于所述数据分区规则以及分区与数据分区键值的对应关系,建立数据分区条件与数据分区键值的对应关系的装置;按照数据分区条件与数据分区键值的对应关系对数据库中的数据条目添加对应的数据分区键值的装置;以及根据数据条目的数据分区键值,将数据条目存储到数据库中的对应分区的装置。13.如前述权利要求12所述的系统,其中建立数据分区条件与数据分区键值的对应关系的装置进一步将所述数据分区条件与数据分区键值的对应关系记录在匹配表中。14.如前述权利要求13所述的系统,其中所述添加对应的数据分区键值的装置进一步包括按照所述数据分区条件制定数据查询语句的装置;获得与所述数据分区条件对应的数据条目的装置;查询所述匹配表以获得所述数据分区条件对应的数据分区键值的装置;以及对所获得的与所述数据分区条件对应的数据条目添加数据分区键值的装置。15.如前述权利要求13所述的系统,其中所述添加对应的数据分区键值的装置进一步包括逐一读取数据库中的数据条目的装置;分析所述数据条目所对应的数据分区条件的装置;查询所述匹配表以获得所述数据条目对应的数据分区键值的装置;以及将所述数据分区键值添加到数据条目中的装置。16.如前述权利要求13所述的系统,其中所述匹配表被存储在高速缓存中。17.如前述权利要求12-16之一所述的系统,其中所述数据库为支持分区的数据库,所述系统进一步还包括预先计算数据分区键值的装置,其中每个数据分区键值与一个分区号相对应,所述预先计算数据分区键值的装置进一步包括在数据库中创建一张表的装置;将至少一个数据分区键值插入到所述表中的装置;查询与所插入的数据分区键值对应的分区号,以确定所述数据分区键值与所述分区号的对应关系的装置。18.如前述权利要求12-16之一所述的系统,其中所述数据库为不支持分区的数据库,所述系统还包括为多个数据库定义多个分区号,以将一个数据库作为一个分区的装置,以及定义数据分区键值,使得所述每个数据分区键值与一个分区号相对应的装置。19.如前述权利要求12-18之一所述的系统,还包括获得新的要被加入到数据库中的数据条目的装置;按照数据分区规则对数据库中的数据条目添加对应的数据分区键值的装置;以及将添加了对应的数据分区键值的数据条目存储到数据库中的对应分区的装置。20.一种数据库查询系统,所述数据库中的数据由权利要求11所述的系统进行了分区,所述数据库查询系统包括获得数据查询请求的装置;解析数据查询请求的装置;判断所述数据查询请求是否与至少一个分区相匹配的装置;响应于所述数据查询请求与至少一个分区相匹配的判断,查找与该数据查询请求对应的数据分区键值的装置;对数据查询请求进行处理以将所述分区键值添加到所述数据查询请求中的装置;以及向数据库发送处理过的数据查询请求的装置。21.如权利要求20所述的系统,还包括记录数据库查询的相关信息作为反馈信息的装置,所述反馈信息至少包含下列各项之数据查询语句中的数据查询条件,按照所述数据查询条件从数据库返回的数据条目的数量,返回所述数据条目的响应时间,实际查询的分区。全文摘要本发明提供了一种灵活、动态的数据库分区方法和系统。本发明主要利用在数据库的数据表中插入数据分区键值的方法,以将符合特定数据分区规则的数据条目存储到特定的分区上,从而实现可更新,可随意定制的数据库分区方案。通过本发明,数据库使用者可以在不改变应用程序代码的前提下,动态的对数据库中的数据进行分区或者重新分区。这样,数据库使用者可以以最低的成本实现灵活的数据管理,同时大大提升数据库的查询速度和效率。文档编号G06F17/30GK101876983SQ200910136968公开日2010年11月3日申请日期2009年4月30日优先权日2009年4月30日发明者张剑鸣,段宁,郭常杰,高波申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1