一种分区系统、分区方法及装置与流程

文档序号:12465883阅读:145来源:国知局
一种分区系统、分区方法及装置与流程

本发明涉及数据查询技术领域,尤其涉及一种分区系统、分区方法及装置。



背景技术:

HBase是一种分布式数据库,数据库中的每张表被划分为多个区,每个区可以设置大小,当超过规定的大小时,一个区会被分为两个区,表中区的划分策略可以使用系统提供的划分策略,也可以自定义划分策略。在HBase的区需要划分时,使用的划分策略实现类会调用getSplitPoint方法,得到该区划分时的分界点。

Hbase的区分布到不同的区服务器上,客户端进行数据库操作时,由相应的区服务器提供服务。其中,客户端进行查询操作时,如果需要查询的数据跨越了多个区,则会顺序的在每一个区上进行查询,每个区上的查询操作是各自独立的,即客户端不会保留上一个区上查询的相关状态。跳跃查找是软件设计中的一种常用操作,例如数据全集有1000条记录,跳跃查找可以跳过前500条,返回10条记录,即返回第501条到510条记录,该操作广泛用于分页查询等功能。

数据库中可以用二元组记录一个对应关系,例如,有群组g1、g2和g3,用户u1、u2和u3,可以在数据库中用(g1,u1)、(g2,u1)、(g2,u2)、(g2,u3)、(g2,u4)和(g3,u3)表示u1属于g1,u1,u2、u3和u4属于g2,u3属于g3。在利用hbase存储上述二元组记录时,由于其分布式特性,可能存在区A上存储(g1,u1)、(g2,u1)、(g2,u2)和(g2,u3),区B上存储(g2,u4)和(g3,u3)的情况,此时假设要对g2进行跳跃查找,例如查询g2群组里的第3个到第4个用户,即跳过用户u1和u2后,取得用户u3和u4,由于Hbase客户端在查询跨越区时不保留状态,因此,在查询区B时无法获知在查询区A的过程中已经跳过的用户数和已经取得的用户数,所以Hbase客户端只能将前4个用户(g2,u1)、(g2,u2)、(g2,u3)和(g2,u4)都取回,舍弃前两个用户(g2,u1)、(g2,u2)后,取得所需的用户(g2,u3)和(g2,u4),此时,被舍弃的两个用户造成了冗余的网络传输。



技术实现要素:

有鉴于此,本发明提供了一种分区系统、分区方法及装置,用以解决现有的分区方式会导致在数据库中查询数据时,除了会获取到需要的数据外还会获取到一些不需要的数据,这些不需要的数据会造成冗余的网络传输的问题,其技术方案如下:

一种分区系统,包括:客户端和数据库服务器;

所述客户端,用于确定散列值取值范围,并将每个待存储的二元组和与所述每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至所述数据库服务器中目标数据表的一目标区中;

所述数据库服务器,用于在所述目标区中数据记录的条数大于预设值时计算分界点,并将所述分界点发送至所述客户端;

所述客户端,还用于从所述分界点中解析出目标二元组以及所述目标二元组对应的散列值,并基于所述目标二元组、所述目标二元组对应的散列值和所述散列值取值范围确定分界点参考值,并将所述分界点参考值发送至所述数据库服务器;

所述数据库服务器,还用于基于所述分界点参考值对所述目标区进行分区。

其中,所述客户端,具体用于从所述散列值取值范围的最大值和最小值中,确定出与所述目标二元组对应的散列值最接近的值作为目标散列值,将所述目标二元组中的第一数据元素与所述目标散列值按所述预设的处理规则处理成一条目标数据记录作为所述分界点参考值。

其中,所述数据库服务器,具体用于基于所述分界点参考值重新确定所述目标区的分界点,并按重新确定的分界点对所述目标区进行分区。

其中,所述客户端,具体用于基于预先设定的散列函数确定所述散列值取值范围;以及,对于所述每个待存储的二元组,利用所述预先设定的散列函数计算该二元组对应的散列值,将该二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据,并将所述第一预设字节的数据、所述第二预设字节的数据和所述第三预设字节的数据按预设顺序进行拼接,获得一条数据记录。

一种分区方法,包括:

确定散列值取值范围,并将每个待存储的二元组和与所述每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至数据库服务器中目标数据表的一目标区中;

获取所述数据库服务器在所述目标区中数据记录的条数大于预设值时计算得到的分界点,并从所述分界点中解析出目标二元组以及所述目标二元组对应的散列值;

基于所述目标二元组、所述目标二元组对应的散列值和所述散列值取值范围确定分界点参考值,并将所述分界点参考值发送至所述数据库服务器,以使所述数据库服务器基于所述分界点参考值对所述目标区进行分区。

其中,所述基于所述目标二元组、所述目标二元组对应的散列值和所述散列值取值范围确定分界点参考值,包括:

从所述散列值取值范围的最大值和最小值中,确定出与所述目标二元组对应的散列值最接近的值作为目标散列值;

将所述目标二元组中的第一数据元素与所述目标散列值按所述预设的处理规则处理成一条目标数据记录作为所述分界点参考值。

其中,所述确定散列值取值范围,包括:

基于预先设定的散列函数确定所述散列值取值范围;

所述将每个待存储的二元组和与所述每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录,包括:

对于所述每个待存储的二元组,利用所述预先设定的散列函数计算该二元组对应的散列值,将该二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据,并将所述第一预设字节的数据、所述第二预设字节的数据和所述第三预设字节的数据按预设顺序进行拼接,获得一条数据记录。

一种分区装置,所述分区装置包括:第一确定模块、处理模块、存储模块、获取模块、解析模块、第二确定模块和发送模块;

所述第一确定模块,用于确定散列值取值范围;

所述处理模块,用于将每个待存储的二元组和与所述每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录;

所述存储模块,用于将所述处理模块处理得到数据记录存储至目标数据表中的一目标区中;

所述获取模块,用于获取所述数据库服务器在所述目标区中数据记录的条数大于预设值时计算得到的分界点;

所述解析模块,用于从所述获取模块获取的所述分界点中解析出目标二元组以及所述目标二元组对应的散列值;

所述第二确定模块,用于基于所述解析模块解析出的所述目标二元组、所述目标二元组对应的散列值和所述第一确定模块确定出的所述散列值取值范围确定分界点参考值;

所述发送模块,用于将所述第二确定模块确定出的所述分界点参考值发送至所述数据库服务器,以使所述数据库服务器基于所述分界点参考值对所述目标区进行分区。

其中,所述第二确定模块包括:

确定子模块和处理子模块;

所述确定子模块,用于从所述散列值取值范围的最大值和最小值中,确定出与所述目标二元组对应的散列值最接近的值作为目标散列值;

所述处理子模块,用于将所述目标二元组中的第一数据元素与所述目标散列值按所述预设的处理规则处理成一条目标数据记录作为所述分界点参考值。

其中,所述第一确定模块,具体用于基于预先设定的散列函数确定所述散列值取值范围;

所述处理模块,包括:散列值计算子模块、数据转换子模块和数据拼接子模块;

所述散列值计算子模块,用于对于所述每个待存储的二元组,利用预先设定的散列函数计算该二元组对应的散列值;

所述数据转换模块,用于将所述每个待存储的二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据;

所述数据拼接子模块,用于将所述第一预设字节的数据、所述第二预设字节的数据和所述第三预设字节的数据按预设顺序进行拼接,获得一条数据记录。

上述技术方案具有如下有益效果:

本发明提供的分区系统、分区方法及装置,能够确定散列值取值范围,并能够将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至数据库服务器中目标数据表的一目标区中,当目标区中数据记录的条数大于预设值时,即目标区需要进行分区时,获取数据库服务器计算的分界点,从分界点中解析出目标二元组以及目标二元组对应的散列值,基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值,并将分界点参考值发送至数据库服务器,以使数据库服务器基于分界点参考值对目标区进行分区。由此可见,本发明提供的分区系统、分区方法及装置,并不直接利用数据库服务器计算出的分界点进行分区(因为该分界点可能会将属于同一群组的数据划分到两个分区中),而是利用基于目标二元组、目标二元组对应的散列值和散列值取值范围确定的分界点参考值对目标区进行分区,这使得属于同一群组的数据能够划分到同一区中,进而使得在查询同一群组的数据时,不会出现跨区查询的情况,相应的也就不会获得不需要的数据,从而避免了冗余的网络传输。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的分区系统的结构示意图;

图2为本发明实施例提供的分区系统中,数据库服务器基于客户端确定的分界点参考值在数据库中进行匹配获得目标区的分界点的一具体实例的示意图;

图3为本发明实施例提供的分区系统中,数据库服务器基于客户端确定的分界点参考值在数据库中进行匹配获得目标区的分界点的另一具体实例的示意图;

图4为本发明实施例提供的分区方法的流程示意图;

图5为本发明实施例提供的分区装置的一结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种分区系统,该分区系统可以包括:客户端101和数据库服务器102。

客户端101,用于确定散列值取值范围,并将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至数据库服务器102中目标数据表的一目标区中。

数据库服务器102,用于在目标区中数据记录的条数大于预设值时计算目标区的分界点,并将目标区的分界点发送至客户端101。

客户端101,还用于从接收的分界点中解析出目标二元组以及目标二元组对应的散列值,并基于目标二元组、目标二元组对应的散列值以及散列值取值范围确定分界点参考值,并将分界点参考值发送至数据库服务器。

数据库服务器102,还用于基于分界点参考值对目标区进行分区。

本发明提供的分区系统中,客户端能够确定散列值取值范围,并能够将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至目标区中,数据库服务器在目标区中数据记录的条数大于预设值时,即目标区需要进行分区时,计算目标区的分界点,客户端从该分界点中解析出目标二元组以及目标二元组对应的散列值,基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值,数据库服务器基于该分界点参考值对目标区进行分区。由此可见,本发明实施例提供的分区系统中,数据库服务器并不直接利用计算出的分界点进行分区(因为该分界点可能会将属于同一群组的数据划分到两个分区中),而是基于客户端确定的分界点参考值对目标区进行分区,使得属于同一群组的数据能够划分到同一区中,进而使得在查询同一群组的数据时,不会出现跨区查询的情况,相应的也就不会获得不需要的数据,从而避免了冗余的网络传输。

上述实施例提供的分区系统中,客户端基于预先设定的散列函数确定散列值取值范围。

在一种可能的实现方式中,可将直接通过预先设定的散列函数的特性确定的取值范围作为本实施例中的散列值取值范围,示例性的,直接通过预先设定的散列函数的特性确定的取值范围为a~z,a~z即为本实施例中散列值取值范围;在另一种可能的实现方式中,可首先直接通过预先设定的散列函数的特性确定第一取值范围,然后基于第一取值范围确定散列值取值范围,散列值取值范围中的最小值可以为小于第一取值范围中的最小值,且与第一取值范围中的最小值相邻的值,散列值取值范围中的最大值可以为大于第一取值范围中的最大值,且与第一取值范围中的最大值相邻的值,示例性的,直接通过预先设定的散列函数的特性确定的取值范围为a~z,假设小于a且与a相邻的值为α,大于z且与z相邻的值为β,则将α~β确定为本实施例中的散列值取值范围。需要说明的是,在后文的描述中所提及的a~z均是按第一种实现方式确定的散列值取值范围,而所提及的α~β均是按第二种实现方式确定的散列值取值范围。

客户端将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至目标数据表中的一目标区的过程可以包括:对于每个待存储的二元组,利用预先设定的散列函数计算该二元组对应的散列值,将该二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据,并将第一预设字节的数据、第二预设字节的数据和第三预设字节的数据按预设顺序进行拼接,获得一条数据记录。其中,二元组对应的散列值具体为二元组中第二数据元素的散列值。

示例性的,存储数据表的数据库为Hbase,待存储的一二元组为(g,u),(g,u)表示数据u属于群组g,首先利用预先设定的散列函数计算该二元组为(g,u)对应的散列值,即计算(g,u)中u的散列值。假设二元组(g,u)对应的散列值为v,然后构造rowkey(g,v,u),构造rowkey(g,v,u)的过程为:将二元组(g,u)中的第一数据元素g转换为第一预设字节的数据,将二元组(g,u)中的第二数据元素u转换为第二预设字节的数据,将二元组(g,u)对应的散列值v转换为第三预设字节的数据,然后将第一预设字节的数据、第三预设字节的数据和第二预设字节的数据拼接成一字节数据串,将字节数据串作为一条数据记录存储到目标数据表中的目标区中。

以数据库服务器为Hbase数据库服务器为例,计算目标区的分界点的实现过程为:向Hbase注册自定义的region split实现类,该实现类继承任意其它region split策略实现类,并重写getSplitPoint方法,在重写的方法中,当目标区中数据记录的条数大于预设值时,首先调用super.getSplitPoint,得到由其它策略实现类计算得到的分界点。

在上述实施例提供的分区系统中,客户端基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值的过程为:从散列值取值范围的最大值和最小值中,确定出与目标二元组对应的散列值最接近的值作为目标散列值,将目标二元组中的第一数据元素与目标散列值按预设的处理规则处理成一条目标数据记录作为分界点参考值。

示例性的,确定出的目标二元组为(g,u),(g,u)对应的散列值为v,散列值的取值范围为α~β,取值范围的最小值为α,取值范围的最大值为β,由于α和β中与v最接近的为β,因此,将β作为目标散列值,然后,将目标二元组为(g,β)中的第一数据元素g和目标散列值β按预设的处理规则处理成一条目标数据作为分界点参考值。在此,为了便于描述,将此时的分界点参考值记为<gβ>,即客户端反馈给数据库服务器的分界点参考值为<gβ>。同样的,如果(g,u)对应的散列值为b,由于α和β中与b最接近的为α,则将α作为目标散列值,然后,将目标二元组为(g,α)中的第一数据元素g和目标散列值α按预设的处理规则处理成一条目标数据作为分界点参考值,即客户端反馈给数据库服务器的分界点参考值为<gα>。

示例性的,确定出的目标二元组为(g,u),(g,u)对应的散列值为v,散列值的取值范围为a~z,取值范围的最小值为a,取值范围的最大值为z,由于a和z中与v最接近的为z,因此,将z作为目标散列值,然后,将目标二元组为(g,u)中的第一数据元素g、目标散列值z以及x按预设的处理规则处理成一条目标数据作为分界点参考值,其中,x的取值可以为属于群组g的所有u中最大的u(即umax),或者为大于umax的任意值。在此,为了便于描述,将此时的分界点参考值记为<g z x>,即客户端反馈给数据库服务器的分界点参考值为<g z x>。同样的,如果(g,u)对应的散列值为b,则由于a和z中与v最接近的为a,因此,将a作为目标散列值,然后,将目标二元组为(g,u)中的第一数据元素g、目标散列值a以及x按预设的处理规则处理成一条目标数据作为分界点参考值,此时,x的取值可以为属于群组g的所有u中最小的u(即umin),或者为小于umin的任意值,客户端反馈给数据库服务器的分界点参考值为<g a x>。

客户端在确定出分界点参考值之后,将分界点参考值发送给数据库服务器,数据库服务器基于分界点参考值重新确定目标区的分界点,并按重新确定的分界点对目标区进行分区。数据库基于分界点参考值重新确定目标区的分界点的过程即基于分界点参考值在数据库中进行匹配的过程。

具体的,在一种可能的实现方式中,分界点参考值包括第一目标数据和第二目标数据,第一目标数据与目标二元组中的第一数据元素对应,第二目标数据与目标散列值对应,则匹配过程为:在目标区中查询与分界点参考值最接近的数据记录,将查询到的与分界点参考值最接近的数据记录确定为目标区的分界点。

在另一种可能的实现方式中,分界点参考值包括第一目标数据、第二目标数据和第三目标数据,第一目标数据与目标二元组中的第一数据元素对应,第二目标数据与目标散列值对应,第三目标数据与目标值x(当目标散列值为取值范围的最大值时,目标值x为包含第一数据元素的二元组中第二数据元素的最大值,或者为大于该最大值的任意值,当目标散列值为取值范围的最小值时,目标值x为包含第一数据元素的二元组中第二数据元素的最小值,或者为小于该最小值的任意值)对应,则匹配过程为:首先在目标区中查询与分界点参考值相同的数据记录,如果查询到,则将与分界点参考值相同的数据记录确定为目标区的分界点,如果未查询到,则进一步查询与分界点参考值最接近的数据记录,将查询到的与分界点参考值最接近的数据记录确定为目标区的分界点。

下面通过一具体实例对上述数据库服务器基于分界点参考值在Hbase数据库中进行匹配获得目标区的分界点的过程进行说明:

请参阅图2(a),示出了目标区中存储的数据,数据库服务器计算得到的分界点为<g v uu4>(为了便于描述,在此将目标区中存储的数据记录表示成<g v uu4>),客户端解析该分界点得到目标二元组(g,uu4)和与该目标二元组(g,uu4)对应的散列值v:

在第一种可能的实现方式中,假设散列值取值范围为α~β(直接通过散列值函数确定的取值范围为a~z),即散列值取值范围的最小值为α,最大值为β,由于α和β中与目标二元组(g,uu4)对应的散列值v最接近的散列值为β,因此,将β作为目标散列值,然后将目标二元组中的第一数据元素g和目标散列值β按预设的处理规则处理成<gβ>,然后将<gβ>作为分界点参考值发送给数据库服务器进行匹配。

具体的,由于在存储二元组,利用散列函数计算的散列值的最大值为z,而β大于z,因此,数据库服务器中不会存在与β相同的散列值,在匹配时,直接在目标区中查找与<gβ>最接近的数据记录,将与<gβ>最接近的数据记录确定为目标区的分界点。由于2(a)中与<gβ>最接近的数据记录为<g w uu5>,因此将<g w uu5>作为最终用于进行分区的分界点。如图2(b)示出了基于重新确定的分界点<g w uu5>对目标区进行分区的示意图,由图2(b)可以看出所有属于群组g的数据被划分到了一个分区中。

在第二种可能的实现方式中,假设散列值取值范围为a~z,即散列值取值范围的最小值为a,最大值为z,由于a和z中与目标二元组(g,uu4)对应的散列值v最接近的散列值为z,因此,将z作为目标散列值,然后将目标二元组中的第一数据元素g、目标散列值z和x按预设的处理规则处理成<g z x>(x可以为uu5,或者大于uu5的任意值),然后将<g z x>作为分界点参考值发送给数据库服务器进行匹配。具体的,首先在图2(a)示出的目标区中查询与<g z x>相同的数据记录,经查询,目标区中没有与<g z x>相同的数据记录,则进一步查询与<g z x>最接近的数据记录,经查询,与<g z x>最接近的数据记录为<g w uu5>,因此,将<g w uu5>作为最终用于进行分区的分界点。

需要说明的是,在第二种可能的实现方式中,之所以向数据库服务器返回<g z x>而不返回<g z>,是因为<g z>为包含g和z的数据中最小的,示例性的,数据库中包含数据<g z 1>、<g z 2>、<g z 3>和<g z 4>,由于<g z 1>、<g z 2>、<g z 3>和<g z 4>均大于<g z>,因此,如果查询与<g z>接近的数据记录作为分界点,会获得<g z 1>,而利用<g z 1>分区会导致属于同一群组g的数据分到两个分区,所以在获得g和z之后,需要将g和z处理成<g z x>,例如,将x设置为4,则<g z x>为<g z 4>,则在数据库中进行匹配时,可匹配得到<g z 4>作为分界点,或者,将x设置为大于4的任值,例如8,即<g z x>为<g z 8>,则在数据库中进行匹配时,可匹配到与<g z 8>最接近的<g z 4>。

上述过程给出了基于散列值取值范围中的最大值重新确定分界点的过程,下面再通过一具体实例给出基于散列值取值范围中的最小值重新确定分界点的过程:

请参阅图3(a),示出了目标区中存储的数据,假设数据库服务器计算得到的分界点为<g f uu2>(为了便于描述,在此将目标区中存储的数据记录表示成<g f uu2>),客户端解析该分界点得到目标二元组(g,uu2)和与该目标二元组(g,uu2)对应的散列值f:

在第一种可能的实现方式中:假设散列值取值范围为α~β(直接通过散列值函数确定的取值范围为a~z),即散列值取值范围的最小值为α,最大值为β,由于α和β中与目标二元组(g,uu2)对应的散列值f最接近的散列值为α,因此,将α作为目标散列值,然后将目标二元组中的第一数据元素g和目标散列值α按预设的处理规则处理成<gα>,然后将<gα>作为分界点参考值发送给数据库服务器进行匹配。

具体的,由于在存储二元组,利用散列函数计算的散列值的最小值为a,而α小于a,因此,数据库服务器中不会存在与α相同的散列值,在匹配时,直接在目标区中查找与<gα>最接近的数据记录,将与<gα>最接近的数据记录确定为目标区的分界点。由于目标区中与<gα>最接近的数据记录为<g b uu1>,因此,将<g b uu1>作为与<gα>匹配的数据记录,即,将<g b uu1>作为最终用于进行分区的分界点。如图3(b)示出了基于重新确定的分界点<g b uu1>对目标区进行分区的示意图,由图3(b)可以看出所有属于群组g的数据被划分到了一个分区中。

在第二种可能的实现方式中:假设散列值取值范围为a~z,即散列值取值范围的最小值为a,最大值为z,由于a和z中与目标二元组(g,uu2)对应的散列值f最接近的散列值为a,因此,将a作为目标散列值,然后将目标二元组中的第一数据元素g、目标散列值和x按预设的处理规则处理成<g a x>(x可以为uu1,或者比uu1小的任意值)),然后将<g a x>作为分界点参考值与目标区中的数据记录进行匹配。

具体的,首先在图3(a)示出的目标区中查询与<g a x>相同的数据记录,经查询,数据库中不存在与<g a x>相同的数据记录,则进一步查询与<g a x>最接近的数据记录,经查询,与<g a x>最接近的数据记录为<g b uu1>,因此,将<g b uu1>作为与<g a x>匹配的数据记录,即,将<g b uu1>作为最终用于进行分区的分界点。

由图2(b)和图3(b)可以看出,基于重新确定的分界点对目标区进行分区,使得属于同一群组的数据能够划分到同一个区中,进而使得当应用跳跃查找方式进行查找时,更加方便和高效。

本发明实施例提供了一种分区方法,请参阅图4,示出了该分区方法的流程示意图,可以包括:

步骤S401:确定散列值取值范围,并将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至数据库服务器中目标数据表的一目标区中。

步骤S402:获取数据库服务器在目标区中数据记录的条数大于预设值时计算得到的分界点,并从分界点中解析出目标二元组以及目标二元组对应的散列值。

需要说明的是,当目标区中数据记录的条数大于预设值,表明需要对目标区进行分区,此时,数据库服务器需要计算目标区的分界点,其中,目标区的分界点为目标区中的一条数据记录。

需要说明的是,由于分界点为目标区中的一条数据记录,而该数据记录由一二元组和该二元组对应的散列值按预设的处理规则处理得到,为了后续步骤的实现,本步骤需要将该条数据记录转换回二元组和该二元组对应的散列值。

步骤S403:基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值,并将分界点参考值发送至数据库服务器,以使数据库服务器基于分界点参考值对目标区进行分区。

需要说明的是,本实施例并不限定确定散列值取值范围这一步骤的执行顺序,只要该步骤在步骤S403中基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值这一步骤之前执行即可。

本发明实施例提供的分区方法,使得数据库服务器并不直接利用计算出的分界点进行分区(因为该分界点可能会将属于同一群组的数据划分到两个分区中),而是利用基于目标二元组、目标二元组对应的散列值和散列值取值范围确定的分界点参考值在数据库中匹配,获得新的分界点,基于该新的分界点对目标区进行分区,这使得属于同一群组的数据能够划分到同一区中,进而使得在查询同一群组的数据时,不会出现跨区查询的情况,相应的也就不会获得不需要的数据,从而避免了冗余的网络传输。

在上述实施例提供的分区方法中,散列值取值范围基于预先设定的散列函数确定。

在一种可能的实现方式中,可将直接通过预先设定的散列函数的特性确定的取值范围作为本实施例中的散列值取值范围,示例性的,直接通过预先设定的散列函数的特性确定的取值范围为a~z,a~z即为本实施例中散列值取值范围;在另一种可能的实现方式中,可首先直接通过预先设定的散列函数的特性确定第一取值范围,然后基于第一取值范围确定散列值取值范围,散列值取值范围中的最小值可以为小于第一取值范围中的最小值,且与第一取值范围中的最小值相邻的值,散列值取值范围中的最大值可以为大于第一取值范围中的最大值,且与第一取值范围中的最大值相邻的值,示例性的,直接通过预先设定的散列函数的特性确定的取值范围为a~z,假设小于a且与a相邻的值为α,大于z且与z相邻的值为β,则将α~β确定为本实施例中的散列值取值范围。

将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录存储至目标数据表中的一目标区中的实现过程可以包括:对于每个待存储的二元组,利用预先设定的散列函数计算该二元组对应的散列值,将该二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据,并将第一预设字节的数据、第二预设字节的数据和第三预设字节的数据按预设顺序进行拼接,获得一条数据记录(可按如下顺序拼接:第一预设字节的数据、第三预设字节的数据、第二预设字节的数据)。其中,二元组对应的散列值具体为二元组中第二数据元素的散列值。

在上述实施例提供的分区方法中,基于目标二元组、目标二元组对应的散列值和散列值取值范围确定分界点参考值,包括:从散列值取值范围的最大值和最小值中,确定出与目标二元组对应的散列值最接近的值作为目标散列值;将目标二元组中的第一数据元素与目标散列值按预设的处理规则处理成一条目标数据记录作为分界点参考值。

示例性的,确定出的目标二元组为(g,u),(g,u)对应的散列值为v,散列值的取值范围为α~β,取值范围的最小值为α,取值范围的最大值为β,由于α和β中与v最接近的为β,因此,将β作为目标散列值,然后,将目标二元组为(g,β)中的第一数据元素g和目标散列值β按预设的处理规则处理成一条目标数据作为分界点参考值。在此,为了便于描述,将此时的分界点参考值记为<ggβ>。同样的,如果(g,u)对应的散列值为b,由于α和β中与b最接近的为α,则将α作为目标散列值,然后,将目标二元组为(g,α)中的第一数据元素g和目标散列值α按预设的处理规则处理成一条目标数据作为分界点参考值,即分界点参考值记为<gα>。

示例性的,确定出的目标二元组为(g,u),(g,u)对应的散列值为v,散列值的取值范围为a~z,取值范围的最小值为a,取值范围的最大值为z,由于a和z中与v最接近的为z,因此,将z作为目标散列值,然后,将目标二元组为(g,u)中的第一数据元素g、目标散列值z以及x按预设的处理规则处理成一条目标数据作为分界点参考值,其中,x的取值可以为属于群组g的所有u中最大的u(即umax),或者为大于umax的任意值。在此,为了便于描述,将此时的分界点参考值记为<g z x>。同样的,如果(g,u)对应的散列值为b,则由于a和z中与v最接近的为a,因此,将a作为目标散列值,然后,将目标二元组为(g,u)中的第一数据元素g、目标散列值a以及x按预设的处理规则处理成一条目标数据作为分界点参考值,此时,x的取值可以为属于群组g的所有u中最小的u(即umin),或者为小于umin的任意值,分界点参考值为<g a x>。

在确定出分界点参考值之后,将分界点参考值发送给数据库服务器,数据库服务器基于分界点参考值在数据库中进行匹配,获得最终用于对目标区进行分区的分界点,并用获得的分界点对目标区进行分区。

与上述方法相对应,本发明实施例还提供了一种分区装置,请参阅图4,示出了该分区装置的结构示意图,该装置可以包括:第一确定模块501、处理模块502、存储模块503、获取模块504、解析模块505、第二确定模块506和发送模块507。

第一确定模块501,用于确定散列值取值范围。

处理模块502,用于将每个待存储的二元组和与每个待存储的二元组对应的散列值按预设的处理规则处理成一条数据记录。

存储模块503,用于将处理模块502处理得到数据记录存储至数据库服务器中目标数据表的一目标区中。

获取模块504,用于获取数据库服务器在目标区中数据记录的条数大于预设值时计算得到的分界点。

解析模块505,用于从获取模块504获取的分界点中解析出目标二元组以及目标二元组对应的散列值。

第二确定模块506,用于基于解析模块505解析得到的目标二元组、目标二元组对应的散列值和第一确定模块401确定的散列值取值范围确定分界点参考值。

发送模块507,用于将第二确定模块506确定出的分界点参考值发送至数据库服务器,以使数据库服务器基于分界点参考值对目标区进行分区。

本发明提供的分区装置,使得数据库服务器并不直接利用计算出的分界点进行分区(因为该分界点可能会将属于同一群组的数据划分到两个分区中),而是利用基于目标二元组、目标二元组对应的散列值和散列值取值范围确定的分界点参考值在数据库中匹配,获得新的分界点,基于该新的分界点对目标区进行分区,这使得属于同一群组的数据能够划分到同一区中,进而使得在查询同一群组的数据时,不会出现跨区查询的情况,相应的也就不会获得不需要的数据,从而避免了冗余的网络传输。

在上述实施例提供的分区装置中,第二确定模块包括:确定子模块和处理子模块。

确定子模块,用于从散列值取值范围的最大值和最小值中,确定出与目标二元组对应的散列值最接近的值作为目标散列值。

处理子模块,用于将目标二元组中的第一数据元素与确定子模块确定的目标散列值按预设的处理规则处理成一条目标数据记录作为分界点参考值。

在上述实施例提供的分区装置中,第一确定模块,具体用于基于预先设定的散列函数确定散列值取值范围。

在上述实施例提供的分区装置中,处理模块包括:散列值计算子模块、数据转换子模块和数据拼接子模块。

散列值计算子模块,用于对于每个待存储的二元组,利用预先设定的散列函数计算该二元组对应的散列值。其中,二元组对应的散列值具体为二元组中第二数据元素的散列值。

数据转换模块,用于将每个待存储的二元组中的第一数据元素转换为第一预设字节的数据,第二数据元素转换为第二预设字节的数据,将该二元组对应的散列值转换为第三预设字节的数据。

数据拼接子模块,用于将第一预设字节的数据、第二预设字节的数据和第三预设字节的数据按预设顺序进行拼接,获得一条数据记录。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1