基于HBase数据库的数据排序方法和装置与流程

文档序号:11155133阅读:591来源:国知局
基于HBase数据库的数据排序方法和装置与制造工艺

本申请涉及计算机领域,具体而言,涉及一种基于HBase数据库的数据排序方法和装置。



背景技术:

数据的排序目前更多的应用于大数据统计中,例如对网站访问量进行排序,可以查看访问量最大的网站排名次序,然后进行一些决策。其中,在小数据量的数据进行排序的情况下,利用当前许多快速的排序算法,排序将是一件非常简单的事情。但是当数据量大到一定级别之后,原本简单的排序也变得复杂起来。例如,当有100G的数据需要排序的时候,系统已经无法简单的把数据读入内存然后进行单机排序,因为没有任何一台服务器有100G的内存,就算有这种超大内存的服务器,也绝对不会用它的全部内存来进行排序。

当前的技术架构所构建的排序方式,可以通过现有的框架来把数据排序的任务分布到集群的各个节点上去计算。即把100G的数据切分,分布到集群的各个节点中去,通过框架的统一调度,在各个节点上读取数据,然后进行排序计算,最后将各个节点上排好序的结果进行合并,然后将整体的结果输出到文件系统中。

上述的排序方式有两个问题:

第一个问题为结果的合并:在各个节点上排好序的排序结果需要进行合并。因为数据本身是无序的,因此各个节点的排序结果之间也是毫无规律的,这样的问题就是合并过程要么十分缓慢,要么需要引入新的分布机制,对于要合并的排序结果数据进行相对有序的再次分布后再次排序和合并,而无论哪一种方案都会比较缓慢。

第二个问题为结果的查看:即整个数据集都排序好之后,需要保存成文件,而这样就造成了查看排序结果的不便,无法快速的查看任意指定区间的排序结果。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请实施例提供了一种基于HBase数据库的数据排序方法和装置,以至少解决 现有技术中数据排序效率低的技术问题。

根据本申请实施例的一个方面,提供了一种基于HBase数据库的数据排序方法,该方法包括:将待排序数据切分至所述HBase数据库的多个集群节点中,其中,每个所述集群节点在得到切分数据后,均执行所述HBase数据库的行键值排序方式;读取每个所述集群节点的排序结果,得到多个所述排序结果,其中,每个所述集群节点执行所述行键值排序方式对切分数据进行排序后,均得到一个所述排序结果;以及确定多个所述排序结果的集合为所述待排序数据的排序结果。

进一步地,每个所述集群节点执行所述行键值排序方式对切分数据进行排序后,均得到一个所述排序结果包括:集群节点Ai执行所述行键值排序方式对切分至所述集群节点Ai的切分数据Di进行排序,得到排序结果Ri,其中,i依次取1至n,n为所述HBase数据库中集群节点的数量,集群节点A1至集群节点An构成所述HBase数据库的多个集群节点,切分数据D1至切分数据Dn构成所述待排序数据,确定多个所述排序结果的集合为所述待排序数据的排序结果包括:所述集群节点Ai将所述切分数据Di的数据键值对存储至所述HBase数据库,得到所述待排序数据的排序结果,其中,所述切分数据Di的数据键值对为所述切分数据Di的标识和所述切分数据Di的数据总量组成的键值对。

进一步地,所述集群节点Ai将所述切分数据Di的数据键值对存储至所述HBase数据库包括:查询所述HBase数据库是否已存储所述切分数据Di的行键值,其中,所述切分数据Di的行键值为所述切分数据Di的数据总量的负数;在所述HBase数据库内已存储所述切分数据Di的行键值的情况下,将所述切分数据Di存储至第一目标列,其中,所述第一目标列为所述切分数据Di的行键值所在行的所属列族中的任意一列;以及在所述HBase数据库内未存储所述切分数据Di的行键值的情况下,根据所述HBase数据库已存储的行键值存储所述切分数据Di键值对。

进一步地,在所述HBase数据库内未存储所述切分数据Di的行键值的情况下,根据所述HBase数据库已存储的行键值存储所述切分数据Di键值对包括:依次比较所述切分数据Di的行键值与已存储至所述HBase数据库中的行键值的大小;将所述切分数据Di的行键值插入至所述HBase数据库中的目标行,其中,所述目标行为第一行键值所在行的下一行或第二行键值所在行的上一行,所述第一行键值和第二行键值均为所述HBase数据库中已存储的行键值,所述第一行键值为小于所述切分数据Di的行键值,并且与所述切分数据Di的行键值差值最小的行键值,所述第二行键值为大于所述切分数据Di的行键值,并且与所述切分数据Di的行键值差值最小的行键值;将所述切分数据Di存储至与所述目标行对应的第二目标列,其中,所述第二目标列为所述目标行 的所属列族中的任意一列;以及更新已存储至所述HBase数据库中的行键值。

进一步地,所述方法还包括:通过所述HBase数据库中的查询接口接收来自用户的查询指令,其中,所述查询指令为查询已存储至所述HBase数据库中任意两个行键值之间的行键值所对应的切分数据的指令;以及以添加预设标识的方式在所述HBase数据库中显示查询到的行键值所对应的切分数据。

根据本申请实施例的另一方面,还提供了一种基于HBase数据库的数据排序装置,该装置包括:切分单元,用于将待排序数据切分至所述HBase数据库的多个集群节点中,其中,每个所述集群节点在得到切分数据后,均执行所述HBase数据库的行键值排序方式;读取单元,用于读取每个所述集群节点的排序结果,得到多个所述排序结果,其中,每个所述集群节点执行所述行键值排序方式对切分数据进行排序后,均得到一个所述排序结果;以及确定单元,用于确定多个所述排序结果的集合为所述待排序数据的排序结果。

进一步地,所述读取单元包括:排序子单元,用于集群节点Ai执行所述行键值排序方式对切分至所述集群节点Ai的切分数据Di进行排序,得到排序结果Ri,其中,i依次取1至n,n为所述HBase数据库中集群节点的数量,集群节点A1至集群节点An构成所述HBase数据库的多个集群节点,切分数据D1至切分数据Dn构成所述待排序数据,所述确定单元包括:存储子单元,用于所述集群节点Ai将所述切分数据Di的数据键值对存储至所述HBase数据库,得到所述待排序数据的排序结果,其中,所述切分数据Di的数据键值对为所述切分数据Di的标识和所述切分数据Di的数据总量组成的键值对。

进一步地,所述存储子单元包括:查询模块,用于查询所述HBase数据库是否已存储所述切分数据Di的行键值,其中,所述切分数据Di的行键值为所述切分数据Di的数据总量的负数;第一存储模块,用于在所述HBase数据库内已存储所述切分数据Di的行键值的情况下,将所述切分数据Di存储至第一目标列,其中,所述第一目标列为所述切分数据Di的行键值所在行的所属列族中对的任意一列;以及第二存储模块,用于在所述HBase数据库内未存储所述切分数据Di的行键值的情况下,根据所述HBase数据库已存储的行键值存储所述切分数据Di键值对。

进一步地,所述第二存储模块包括:比较子模块,用于依次比较所述切分数据Di的行键值与已存储至所述HBase数据库中的行键值的大小;插入子模块,用于将所述切分数据Di的行键值插入至所述HBase数据库中的目标行,其中,所述目标行为第一行键值所在行的下一行或第二行键值所在行的上一行,所述第一行键值和第二行键值均为所述HBase数据库中已存储的行键值,所述第一行键值为大于所述切分数据Di 的行键值,并且与所述切分数据Di的行键值差值最小的行键值,所述第二行键值为小于所述切分数据Di的行键值,并且与所述切分数据Di的行键值差值最小的行键值;存储子模块,用于将所述切分数据Di存储至与所述目标行对应的第二目标列,其中,所述第二目标列为所述目标行的所属列族中的任意一列;以及更新子模块,用于更新已存储至所述HBase数据库中的行键值。

进一步地,所述装置还包括:接收单元,用于通过所述HBase数据库中的查询接口接收来自用户的查询指令,其中,所述查询指令为查询已存储至所述HBase数据库中任意两个行键值之间的行键值所对应的切分数据的指令;以及显示单元,用于以添加预设标识的方式在所述HBase数据库中显示查询到的行键值所对应的切分数据。

在本申请实施例中,采用将待排序数据切分至所述HBase数据库的多个集群节点中,其中,每个所述集群节点在得到切分数据后,均执行所述HBase数据库的行键值排序方式;读取每个所述集群节点的排序结果,得到多个所述排序结果,其中,每个所述集群节点执行所述行键值排序方式对切分数据进行排序后,均得到一个所述排序结果;以及确定多个所述排序结果的集合为所述待排序数据的排序结果的方式,通过将待排序数据切分至HBase数据库所在的多个集群节点中,由于HBase数据库具有能够自动排序的行键值排序方式,因此待排序数据切分至多个集群节点之后,可实现自动的排序;然后读取多个集群节点中的排序结果,将每个集群节点中已排序完成的切分数据按照行键值排序方式再进行整体排序,得到多个排序结果,其中,多个排序结果的集合即为待排序数据的排序结果,本申请采用HBase数据库行键值的排序方式省略了现有技术中需要将各个集群节点中的待排序数据合并之后才能对待排序数据进行排序的环节,达到了缩短数据排序时间的目的,从而实现了不需要对各数据库中的待排序数据进行合并就能实现数据排序的技术效果,进而解决了现有技术中数据排序效率低的技术问题,提高了数据排序的性能。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的一种基于HBase数据库的数据排序方法的流程图;以及

图2是根据本申请实施例的一种基于HBase数据库的数据排序装置的示意图。

具体实施方式

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

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,对本实施例涉及的技术术语作如下解释:

HBase是一个分布式的、面向列的开源数据库,一个结构化数据的分布式存储系统。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

rowkey是HBase的数据唯一标识。HBase保存数据依照rowkey排序,HBase查询数据也是基于rowkey,或者直接获取指定单一rowkey的整条数据,或者扫描开始rowkey到结束rowkey的整个数据区间。

family是HBase在物理上分隔数据的标志,需要在建表的时候预定义,大部分时候只使用单一的family,即对于同一行数据在物理上并不进行隔离,方便查询。

column是HBase的列名,HBase是非结构化数据库,也就是在创建HBase表时不需要预先定义column,可以随时使用随时添加。

value是HBase最终保存的数据值,通过rowkey+family+column的可以找到保存的值。

根据本申请实施例,提供了一种基于HBase数据库的数据排序方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本申请实施例的一种基于HBase数据库的数据排序方法的流程图,如图1所示,该方法包括如下步骤S102至步骤S106:

步骤S102,将待排序数据切分至HBase数据库的多个集群节点中,其中,每个集群节点在得到切分数据后,均执行HBase数据库的行键值排序方式。

具体地,待排序数据可以为某网站在某一时段的访问量,例如www.baidu.com的访问量,www.google.comde的访问量等,还可以为某关键词在某一时段的搜索量,例如“抗战阅兵直播”在2015年9月3号的搜索量,“北京限行”在2015年9月3号的搜索量。需要说明的是,待排序数据不仅仅为上述的网站访问量和关键词的搜索量,还包括任意需要排序的数据。

由于HBase数据库所具有的行键值(rowkey)排序方式,当切分待排序数据至HBase数据库中的多个集群节点时,切分到每个集群节点中的切分数据均按照该行键值排序方式进行排序。

步骤S104,读取每个集群节点的排序结果,得到多个排序结果,其中,每个集群节点执行行键值排序方式对切分数据进行排序后,均得到一个排序结果。

具体地,每个集群节点中的切分数据按照行键值的排序方式进行排序之后,均得到一个排序结果,依次读取每一个集群节点中的排序结果,到多个排序结果。需要说明的是,多个排序结果存储于HBase数据库中的多个集群节点中,例如,当切分数据为某网站的访问量时,集群节点a中可以为访问量为10000至访问量为1000的网页的排序结果,集群节点b中可以为访问量为999至访问量为100的网页的排序结果,集群节点c中可以为访问量为99至访问量为0的网页的排序结果。其中,对切分数据进行整体排序之后,得到的多个排序结果的数量可根据用户的实际需要来进行选取。

步骤S106,确定多个排序结果的集合为待排序数据的排序结果。分布于多个集群节点中的多个排序结果的集合组成待排序数据的排序结果。

在本申请实施例中,通过将待排序数据切分至HBase数据库所在的多个集群节点中,由于HBase数据库具有能够自动排序的行键值排序方式,因此待排序数据切分至多个集群节点之后,可实现自动的排序;然后读取多个集群节点中的排序结果,将每个集群节点中已排序完成的切分数据按照行键值排序方式再进行整体排序,得到多个排序结果,其中,多个排序结果的集合即为待排序数据的排序结果,本申请采用HBase数据库行键值的排序方式省略了现有技术中需要将各个集群节点中的待排序数据合并之后才能对待排序数据进行排序的环节,达到了缩短数据排序时间的目的,从而实现了不需要对各数据库中的待排序数据进行合并就能实现数据排序的技术效果,进而解 决了现有技术中数据排序效率低的技术问题,提高了数据排序的性能。

可选地,每个集群节点执行行键值排序方式对切分数据进行排序后,均得到一个排序结果包括如下步骤S1041:

步骤S1041,集群节点Ai执行行键值排序方式对切分至集群节点Ai的切分数据Di进行排序,得到排序结果Ri,其中,i依次取1至n,n为HBase数据库中集群节点的数量,集群节点A1至集群节点An构成HBase数据库的多个集群节点,切分数据D1至切分数据Dn构成待排序数据。

具体地,当切分待排序数据到HBase数据库中集群节点A1至集群节点An时,切分数据Di以数据键值对的形式无序的存储于各个集群节点中。然后将切分数据Di的数据键值对,按照行键值排序方式进行排序,每一个集群节点按照行键值排序方式之后,均得到一个排序结果Ri。假设,切分数据Di可以为某一时段内多个网站的访问量,若域名为www.baidu.com的网站的访问量为10000,则该网站的域名www.baidu.com和访问量10000组成数据键值对,该数据键值对表示为(www.baidu.com 10000);同样地,若域名为www.google.com的网站的访问量为1000,则该网站的域名www.google.com和访问量1000组成数据键值对,表示为(www.google.com 1000)。

需要说明的是,在上述待排序数据切分的过程中,用户可根据各个集群节点的剩余存储空间来决定切分到各个集群节点中的切分数据Di的数据量。

确定多个排序结果的集合为待排序数据的排序结果包括步骤S1061,集群节点Ai将切分数据Di的数据键值对存储至HBase数据库,得到待排序数据的排序结果,其中,切分数据Di的数据键值对为切分数据Di的标识和切分数据Di的数据总量组成的键值对。

具体地,分别读取排序结果Ri中的切分数据Di的数据键值对,并按照固定的格式将切分数据Di的数据键值对存储至HBase数据库中。需要说明的是,在上述步骤中举例说明了当切分数据Di为网站在某一时段的访问量时,数据键值对可以为该网站的域名(即切分数据Di的标识)和该网站在某一时段的访问量(即切分数据Di的数据总量)组成。同样地,若切分数据为某一关键词的搜索量时,则该数据键值对还可以为关键词(即切分数据Di的标识)和该关键词在某一时段的搜索量即切分数据Di的数据总量)组成。综上描述,切分数据Di的数据键值对由切分数据Di的标识和该切分数据Di的数据总量组成。

当切分数据Di为某网站在某一时段内的访问量时,对集群节点Ai中的切分数据Di进行整体排序时,需将经过整体排序之后的切分数据Di的数据键值对有序的存储 至HBase数据库中的多个集群节点中,多个集群节点组成的排序结果即为待排序数据的排序结果。其中,假设有4个集群节点,集群节点1中可以存储访问量为100000~10000的切分数据,集群节点2中可以存储访问量为9999~1000的切分数据,集群节点3可以存储访问量为999~100的切分数据,集群节点4可存储访问量为99~0的切分数据。集群节点1至集群节点4均为HBase数据库中的集群节点,其中,集群节点的数量可根据用户实际需要来选取。

可选地,步骤S1061中集群节点Ai将切分数据Di的数据键值对存储至HBase数据库包括如下步骤S1至步骤S5:

步骤S1,查询HBase数据库是否已存储切分数据Di的行键值,其中,切分数据Di的行键值为切分数据Di的数据总量的负数。

步骤S3,在HBase数据库内已存储切分数据Di的行键值的情况下,将切分数据Di存储至第一目标列,其中,第一目标列为切分数据Di的行键值所在行的所属列族中对的任意一列。

步骤S5,在HBase数据库内未存储切分数据Di的行键值的情况下,根据HBase数据库已存储的行键值存储切分数据Di键值对。

具体地,在本申请实施例,采用行键值排序方式对集群节点Ai中的切分数据Di进行排序,因此,在将集群节点Ai中的切分数据Di进行整体排序时,先获取切分数据Di的行键值rowkey,并在HBase数据库中查询是否已存储切分数据Di的行键值rowkey,其中,行键值rowkey为该切分数据Di的数据键值对中数据总量的负数。

假设,切分数据Di中某一切分数据的数据键值对为(www.baidu.com 10000),则该切分数据的行键值即为-10000。若在HBase数据库中查询到该行键值-10000,则将数据键值对(www.baidu.com 10000)中的域名“www.baidu.com”存储至HBase数据库中即可,具体存储的位置为行键值-10000所在行的所属列族中的任意一族。若在HBase数据库中未查询到该行键值-10000,则通过比较该行键值-10000与已存储至HBase数据库中的行键值的大小来将该行键值-10000插入至HBase数据库中的指定集群节点中。

对于已存储至数据库中的切分数据Di存储形式为rowkey:-10000,family:f column:www.baidu.com value:1,其中,family是HBase在物理上分隔数据的标志,value是HBase的列名,当rowkey:-10000存储至某一行时,family:f,column:www.baidu.com和value:1均存储至行键值-10000所在行的所属列族中的任意一族,并且family:f,column:www.baidu.com和value:1存储于同一列中。

进一步地,步骤S5中,在HBase数据库内未存储切分数据Di的行键值的情况下,根据HBase数据库已存储的行键值存储切分数据Di键值对包括如下步骤S51至步骤S57:

步骤S51,依次比较切分数据Di的行键值与已存储至HBase数据库中的行键值的大小。

步骤S53,将切分数据Di的行键值插入至HBase数据库中的目标行,其中,目标行为第一行键值所在行的下一行或第二行键值所在行的上一行,第一行键值和第二行键值均为HBase数据库中已存储的行键值,第一行键值为小于切分数据Di的行键值,并且与切分数据Di的行键值差值最小的行键值,第二行键值为大于切分数据Di的行键值,并且与切分数据Di的行键值差值最小的行键值。

步骤S55,将切分数据Di存储至与目标行对应的第二目标列,其中,第二目标列为目标行的所属列族中的任意一列。

步骤S57,更新已存储至HBase数据库中的行键值。

其中,每次更新已存储的行键值后,在下次根据HBase数据库中已存储的行键值存储未存储切分数据Di键值对时,会重新确认相应的第一行键值和第二行键值。对于一个切分数据Di的键值对,如果它的第一行键值和第二行键值都存在,那么第一行键值小于第二行键值。

具体地,若HBase数据库中存储的行键值为-100000,-50000和-40000,并未存储数值为-10000的行键值,此时将数值为-10000的行键值分别与数值为-100000,-50000和-40000的行键值进行比较。

当切分数据Di为网站的访问量或者为某关键词的搜索量时,用户实际更希望查看访问量为前几位的网站,或者查看搜索量为前几位的关键词,此时,在HBase数据库中以负数的形式来保存行键值,以便按照从小到大的顺序排列行键值,即按照由大到小的顺序排列访问量。

例如,将数值为-10000的行键值分别与数值为-100000,-50000和-40000的行键值进行比较,通过比较可知,-100000,-50000和-40000均小于-10000,并且-40000与-10000的差值最小,因此将-10000插入至行键值-40000所在行的下一行中,其中,行键值-40000也即为第一行键值。在上述步骤S1061中的描述可知,若集群节点1中存储访问量为100000~10000的切分数据,行键值-40000和-10000均应该存储在集群节点1中,因此,将数值为-10000的行键值插入至数值为-40000的行键值所在行的下一行中,并将数值为-10000的行键值的切分数据Di存储至数值为-10000的行键值所 在目标行的所属列族中的任意一列,其中,数值为-40000的行键值即为第一行键值。通过上述排序方法,即可完成对网站的访问量进行由大到小的排序。

又例如,若HBase数据库中存储的行键值为-5000,-4000和-1000,并未存储数值为-10000的行键值,通过比较可知,-5000,-4000和-1000均大于-10000,并且-10000与-5000的差值最小,因此将-10000应插入至行键值-5000所在行的上一行(即,目标行)中,其中,行键值-5000也即为第二行键值。但是,在上述步骤S1061中的描述可知,若集群节点2中存储访问量为9999~1000的切分数据,此时将数值为-10000的行键值和数值为-5000的行键值并未存储于同一集群节点中。因此,数值为-10000的行键值应存储于集群节点1中,由于数值为-10000的行键值为节点1中所有行键值中的最大行键值,因此将数值为-10000的行键值存储至集群节点1中最后一行(即,目标行)即可。

又例如,通过比较可知,HBase数据库中存储数值为-5000,-4000、-1000和-500的行键值,此时,需要插入数值为-2000的行键值,通过将-2000分别与-5000,-4000和-1000进行比较可知,-2000大于-4000和-5000,并且与-4000的差值最小,因此,将数值为-2000的行键值应插入至数值为-4000的行键值所在行的下一行(即,目标行)中;又或者,-2000小于-1000和-500,并且与-1000的差值最小,因此将数值为-2000的行键值插入至-1000所在行的上一行(即,目标行)中,并将行键值为-2000的切分数据Di存储至数值为-2000的行键值所在目标行的所属列族中的任意一列,其中,数值为-4000的行键值即为第一行键值,数值为-1000的行键值即为第二行键值。

通过上述排序方法对集群节点Ai中的切分数据Di进行排序,不需要再将集群节点Ai中的每个集群节点中的切分数据Di进行整合,通过读取切分数据Di的行键值即可实现切分数据Di的快速排序。例如,本申请实施例中,将www.baidu.com的域名作为列名保存到行键值为-10000的行中,若有其他网站的访问量同样为10000,则可以将其保存到行键值为-10000的所在行的所属列族中的任意一空闲列中,与www.baidu.com这一列不发生任何冲突。在本申请实施例中,将访问量的负数作为行键值保存至HBase数据库是为了将访问量大的数据排在HBase中的前面,方便查询。并且,本申请实施例提供的排序方法,对于数据量较大的待排序数据,可实现快速对待排序数据进行排序的效果。

可选地,本申请提供的排序方法还包括如下步骤S7至步骤S9:

步骤S7,通过HBase数据库中的查询接口接收来自用户的查询指令,其中,查询指令为查询已存储至HBase数据库中任意两个行键值之间的所对应的切分数据的指令。

步骤S9,以添加预设标识的方式在HBase数据库中显示查询到的切分数据。

HBase作为数据库提供了相当方便的查询接口,通过查询接口可以查询指定任意行键值区间内的切分数据。比如可以很快速的查询到行键值为-1000到行键值为-900之间的网站域名有哪些,并且能够以预设标识的形式显示出来,预设标识为添加背景色、字体的修改,以及悬浮气泡等形式。

若在HBase数据库中并未存储数值在-1000到-900之间的行键值,而存储了数值为-1000的行键值和数值为-900的行键值时,查询行键值为-1000时,网站的域名有哪些,并查询行键值为-900时,网站的域名有哪些。

又若在HBase数据库中并未存储数值在-1000到-900之间的行键值,也未存储数值为-1000的行键值和数值为-900的行键值时,则可以弹出提示信息,以提示用户“查询的数据不存在”,还可以显示空数据,以表明在HBase数据库中并未存储该行键值。

又若在HBase数据库中并未存储数值为-1000行键值和数值为-900的行键值,而存储了数值在-1000和-900之间的行键值时,例如存储的行键值为-950的行键值,则查询行键值为-950时,网站的域名有哪些。

本申请实施例还提供了一种基于HBase数据库的数据排序装置,该数据排序装置主要用于执行本申请实施例上述内容所提供的基于HBase数据库的数据排序方法,以下对本申请实施例所提供的基于HBase数据库的数据排序装置做具体介绍。

图2是根据本申请实施例的一种基于HBase数据库的数据排序装置的示意图。如图2所示,该数据排序装置包括:切分单元10、读取单元20和确定单元30,其中:

切分单元10,用于将待排序数据切分至HBase数据库的多个集群节点中,其中,每个集群节点在得到切分数据后,均执行HBase数据库的行键值排序方式。

具体地,待排序数据可以为某网站在某一时段的访问量,例如www.baidu.com的访问量,www.google.comde的访问量等,还可以为某关键词在某一时段的搜索量,例如“抗战阅兵直播”在2015年9月3号的搜索量,“北京限行”在2015年9月3号的搜索量。需要说明的是,待排序数据不仅仅为上述的网站访问量和关键词的搜索量,还包括任意需要排序的数据。

由于HBase数据库所具有的行键值(rowkey)排序方式,当切分待排序数据至HBase数据库中的多个集群节点时,切分到每个集群节点中的切分数据均按照该行键值排序方式进行排序。

读取单元20,用于读取每个集群节点的排序结果,得到多个排序结果,其中,每 个集群节点执行行键值排序方式对切分数据进行排序后,均得到一个排序结果。

具体地,每个集群节点中的切分数据按照行键值的排序方式进行排序之后,均得到一个排序结果,依次读取每一个集群节点中的排序结果,得到多个排序结果。需要说明的是,多个排序结果存储于HBase数据库中的多个集群节点中,例如,当切分数据为某网站的访问量时,集群节点a中可以为访问量为10000至为访问量1000的网页的排序结果,集群节点b中可以为访问量为999至为访问量100的网页的排序结果,集群节点c中可以为访问量为99至访问量为0的网页的排序结果。其中,对切分数据进行整体排序之后,得到的多个排序结果的数量可根据用户的实际需要来进行选取。

确定单元30,用于确定多个排序结果的集合为待排序数据的排序结果。

在本申请实施例中,通过将待排序数据切分至HBase数据库所在的多个集群节点中,由于HBase数据库具有能够自动排序的行键值排序方式,因此待排序数据切分至多个集群节点之后,可实现自动的排序;然后读取多个集群节点中的排序结果,将每个集群节点中已排序完成的切分数据按照行键值排序方式再进行整体排序,得到多个排序结果,其中,多个排序结果的集合即为待排序数据的排序结果,本申请采用HBase数据库行键值的排序方式省略了现有技术中需要将各个集群节点中的待排序数据合并之后才能对待排序数据进行排序的环节,达到了缩短数据排序时间的目的,从而实现了不需要对各数据库中的待排序数据进行合并就能实现数据排序的技术效果,进而解决了现有技术中数据排序效率低的技术问题,提高了数据排序的性能。

可选地,读取单元20包括排序子单元,其中:

排序子单元,用于集群节点Ai执行行键值排序方式对切分至集群节点Ai的切分数据Di进行排序,得到排序结果Ri,其中,i依次取1至n,n为HBase数据库中集群节点的数量,集群节点A1至集群节点An构成HBase数据库的多个集群节点,切分数据D1至切分数据Dn构成待排序数据。

确定单元30包括存储子单元,其中,存储子单元用于集群节点Ai将切分数据Di的数据键值对存储至HBase数据库,得到待排序数据的排序结果,其中,切分数据Di的数据键值对为切分数据Di的标识和切分数据Di的数据总量组成的键值对。

具体地,当切分待排序数据到HBase数据库中集群节点A1至集群节点An时,切分数据Di以数据键值对的形式无序的存储于各个集群节点中。然后将切分数据Di的数据键值对,按照行键值排序方式进行排序,每一个集群节点按照行键值排序方式之后,均得到一个排序结果Ri。假设,切分数据Di可以为某一时段内多个网站的访问量,若域名为www.baidu.com的网站的访问量为10000,则该网站的域名www.baidu.com 和访问量10000组成数据键值对,该数据键值对表示为(www.baidu.com 10000);同样地,若域名为www.google.com的网站的访问量为1000,则该网站的域名www.google.com和访问量1000组成数据键值对,表示为(www.google.com 1000)。

需要说明的是,在上述待排序数据切分的过程中,用户可根据各个集群节点的剩余存储空间来决定切分到各个集群节点中的切分数据Di的数据量。

分别读取排序结果Ri中的切分数据Di的数据键值对,并按照固定的格式将切分数据Di的数据键值对存储至HBase数据库中。需要说明的是,在上述描述中举例说明了当切分数据Di为网站在某一时段的访问量时,数据键值对可以为该网站的域名(即切分数据Di的标识)和该网站在某一时段的访问量(即切分数据Di的数据总量)组成。同样地,若切分数据为某一关键词的搜索量时,则该数据键值对还可以为关键词(即切分数据Di的标识)和该关键词在某一时段的搜索量即切分数据Di的数据总量)组成。综上描述,切分数据Di的数据键值对由切分数据Di的标识和该切分数据Di的数据总量组成。

当切分数据Di为某网站在某一时段内的访问量时,对集群节点Ai中的切分数据Di进行整体排序时,需将经过整体排序之后的切分数据Di的数据键值对有序的存储至HBase数据库中的多个集群节点中,多个集群节点组成的排序结果即为待排序数据的排序结果。其中,假设有4个集群节点,集群节点1中可以存储访问量为100000~10000的切分数据,集群节点2中可以存储访问量为9999~1000的切分数据,集群节点3可以存储访问量为999~100的切分数据,集群节点4可存储访问量为99~0的切分数据。集群节点1至集群节点4均为HBase数据库中的集群节点,其中,集群节点的数量可根据用户实际需要来选取。

可选地,存储子单元包括查询模块、第一存储模块和第二存储模块,其中:

查询模块,用于查询HBase数据库是否已存储切分数据Di的行键值,其中,行键值为切分数据Di的数据总量的负数;第一存储模块,用于在HBase数据库内已存储切分数据Di的行键值的情况下,将切分数据Di存储至第一目标列,其中,第一目标列为切分数据Di的行键值所在行的所属列族中对的任意一列;第二存储模块,用于在HBase数据库内未存储切分数据Di的行键值的情况下,根据HBase数据库已存储的行键值存储切分数据Di键值对。

具体地,在本申请实施例,采用行键值排序方式对集群节点Ai中的切分数据Di进行排序,因此,在将集群节点Ai中的切分数据Di进行整体排序时,先获取切分数据Di的行键值rowkey,并在HBase数据库中查询是否已存储切分数据Di的行键值 rowkey,其中,行键值rowkey为该切分数据Di的数据键值对中数据总量的负数。

假设,切分数据Di中某一切分数据的数据键值对为(www.baidu.com 10000),则该切分数据的行键值即为-10000。若在HBase数据库中查询到该行键值-10000,则将数据键值对(www.baidu.com 10000)中的域名“www.baidu.com”存储至HBase数据库中即可,具体存储的位置为行键值-10000所在行的所属列族中的任意一族。若在HBase数据库中未查询到该行键值-10000,则通过比较该行键值-10000与已存储至HBase数据库中的行键值的大小来将该行键值-10000插入至HBase数据库中的指定集群节点中。

对于已存储至数据库中的切分数据Di存储形式为rowkey:-10000,family:f column:www.baidu.com value:1,其中,family是HBase在物理上分隔数据的标志,value是HBase的列名,当rowkey:-10000存储至某一行时,family:f,column:www.baidu.com和value:1均存储至行键值-10000所在行的所属列族中的任意一族,并且family:f,column:www.baidu.com和value:1存储于同一列中。

可选地,第二存储模块包括比较子模块、插入子模块、存储子模块和更新子模块,其中:

比较子模块,用于依次比较切分数据Di的行键值与已存储至HBase数据库中的行键值的大小;插入子模块,用于将切分数据Di的行键值插入至HBase数据库中的目标行,其中,目标行为第一行键值所在行的下一行或第二行键值所在行的上一行,第一行键值和第二行键值均为HBase数据库中已存储的行键值,第一行键值为大于切分数据Di的行键值,并且与切分数据Di的行键值差值最小的行键值,第二行键值为小于切分数据Di的行键值,并且与切分数据Di的行键值差值最小的行键值;存储子模块,用于将切分数据Di存储至与目标行对应的第二目标列,其中,第二目标列为目标行的所属列族中的任意一列;更新子模块,用于更新已存储至HBase数据库中的行键值。

具体地,若HBase数据库中存储的行键值为-100000,-50000和-40000,并未存储数值为-10000的行键值,此时将数值为-10000的行键值分别与数值为-100000,-50000和-40000的行键值进行比较。

当切分数据Di为网站的访问量或者为某关键词的搜索量时,用户实际更希望查看访问量为前几位的网站,或者查看搜索量为前几位的关键词,此时,在HBase数据库中以负数的形式来保存行键值,以便按照从小到大的顺序排列行键值,即按照由大到小的顺序排列访问量。

例如,将数值为-10000的行键值分别与数值为-100000,-50000和-40000的行键 值进行比较,通过比较可知,-100000,-50000和-40000均小于-10000,并且-40000与-10000的差值最小,因此将-10000插入至行键值-40000所在行的下一行中,其中,行键值-40000也即为第一行键值。上述描述可知,若集群节点1中存储访问量为100000~10000的切分数据,行键值-40000和-10000均应该存储在集群节点1中,因此,将数值为-10000的行键值插入至数值为-40000的行键值所在行的下一行中,并将数值为-10000的行键值的切分数据Di存储至数值为-10000的行键值所在目标行的所属列族中的任意一列,其中,数值为-40000的行键值即为第一行键值。通过上述排序方法,即可完成对网站的访问量进行由大到小的排序。

又例如,若HBase数据库中存储的行键值为-5000,-4000和-1000,并未存储数值为-10000的行键值,通过比较可知,-5000,-4000和-1000均大于-10000,并且-10000与-5000的差值最小,因此将-10000应插入至行键值-5000所在行的上一行中,其中,行键值-5000也即为第二行键值。但是,上述描述可知,若集群节点2中存储访问量为9999~1000的切分数据,此时将数值为-10000的行键值和数值为-5000的行键值并未存储于同一集群节点中。因此,数值为-10000的行键值应存储于集群节点1中,由于数值为-10000的行键值为节点1中所有行键值中的最大行键值,因此将数值为-10000的行键值存储至集群节点1中最后一行即可。

又例如,通过比较可知,HBase数据库中存储数值为-5000,-4000、-1000和-500的行键值,此时,需要插入数值为-2000的行键值,通过将-2000分别与-5000,-4000和-1000进行比较可知,-2000大于-4000和-5000,并且与-4000的差值最小,因此,将数值为-2000的行键值应插入至数值为-4000的行键值所在行的下一行中;又或者,-2000小于-1000和-500,并且与-1000的差值最小,因此将数值为-2000的行键值插入至-1000所在行的上一行中,并将行键值为-2000的切分数据Di存储至数值为-2000的行键值所在目标行的所属列族中的任意一列,其中,数值为-4000的行键值即为第一行键值,数值为-1000的行键值即为第二行键值。

可选地,本申请提供的基于HBase数据库的数据排序装置还包括接收单元和显示单元,其中:

接收单元,用于通过HBase数据库中的查询接口接收来自用户的查询指令,其中,查询指令为查询已存储至HBase数据库中任意两个行键值之间的行键值所对应的切分数据的指令;显示单元,用于以添加预设标识的方式在HBase数据库中显示查询到的行键值所对应的切分数据。

HBase作为数据库提供了相当方便的查询接口,通过查询接口可以查询指定任意行键值区间内的切分数据。比如可以很快速的查询到行键值为-1000到行键值为-900 之间的网站域名有哪些,并且能够以预设标识的形式显示出来,预设标识为添加背景色、字体的修改,以及悬浮气泡等形式。

若在HBase数据库中并未存储数值在-1000到-900之间的行键值,而存储了数值为-1000的行键值和数值为-900的行键值时,查询行键值为-1000时,网站的域名有哪些,并查询行键值为-900时,网站的域名有哪些。

又若在HBase数据库中并未存储数值在-1000到-900之间的行键值,也未存储数值为-1000的行键值和数值为-900的行键值时,则可以弹出提示信息,以提示用户“查询的数据不存在”,还可以显示空数据,以表明在HBase数据库中并未存储该行键值。

又若在HBase数据库中并未存储数值为-1000行键值和数值为-900的行键值,而存储了数值在-1000和-900之间的行键值时,例如存储的行键值为-950的行键值,则查询行键值为-950时,网站的域名有哪些。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

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

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

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

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

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