一种数据处理方法及服务器与流程

文档序号:12719972阅读:435来源:国知局
一种数据处理方法及服务器与流程

本发明涉及数据处理技术,尤其涉及一种数据处理方法及服务器。



背景技术:

HBase是Apache Hadoop的数据库,其能够对大数据提供随机、实时的读写访问功能,并具有开源、分布式、可扩展及面向列存储等特点;HBase只需使用普通的硬件配置便能够存储并处理成千上万的行和列的数据。

现有技术中,通常根据HBase自身提供的分页过滤器(Page Filter)来实现HBase的行分页;在实现行分页的过程中,用户在创建当前过滤器的时候需要指定pageSize参数,用于控制每页返回的行数;同时,客户端代码会记录本次扫描的最后一行,并在下次获取数据时,把记录的上次扫描的最后一行设置为本次扫描的起始行,基于保留的相同的过滤属性一次进行迭代。

但是,上述的行分页方法存在如下问题:第一,每次获取数据时,必须先知道扫描的起始行,因此不能支持任意页的查询;第二,在分页查询中想获取数据量总的个数时,需要用到cout函数,而对于存储和处理大数据的HBase来说,cout函数的处理效率很低。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种数据处理方法及服务器,能够实现数据库内任意页的数据查询,并能够轻量级的获取总的数据量。

为达到上述目的,本发明的技术方案是这样实现的:

本发明实施例提供一种服务器,所述服务器包括:

建立单元,用于建立数据库中的行键与行键索引的映射关系表;

获取单元,用于根据预设的分页参数在所述映射关系表中获取行键索引;

确定单元,用于确定所获取的行键索引对应的第一数据;

分页单元,用于查询所述数据库中总的数据量,基于所述数据量和所述第一数据进行数据分页。

上述方案中,所述建立单元,具体用于设置所述数据库中的行键对应的行键索引,存储行键与行键索引的对应关系为映射关系表。

上述方案中,所述获取单元,具体用于将所述分页参数中偏移量转化为与所述行键索引相同数据类型的值,并将转化后的偏移量作为起始行键的前缀;

将所述转化后的偏移量、所述分页参数中分页大小的值与1相加得到的结果作为中终止行键的前缀;

基于所述起始行键的前缀和所述终止行键的前缀在所述映射关系表中获取行键索引。

上述方案中,所述确定单元,具体用于基于所述行键索引在所述数据库中查找与所述行键索引对应的行键值为第一数据。

上述方案中,所述分页单元,具体用于在所述数据库的getRowOrBefore函数中输入所述行键索引的数据结构能够表示的最大值,生成第二数据;所述第二数据中最后一行数据的行键值去除前缀的零后得到的值为所述数据库中总的数据量。

本发明实施例提供一种数据处理方法,所述方法应用于服务器,所述方法包括:

建立数据库中的行键与行键索引的映射关系表;

根据预设的分页参数在所述映射关系表中获取行键索引;

确定所获取的行键索引对应的第一数据;

查询所述数据库中总的数据量,基于所述数据量和所述第一数据进行数据分页。

上述方案中,所述建立数据库中的行键与行键索引的映射关系表,包括:

设置所述数据库中的行键对应的行键索引,存储行键与行键索引的对应关系为映射关系表。

上述方案中,所述根据预设的分页参数在所述映射关系表中获取行键索引包括:

将所述分页参数中偏移量转化为与所述行键索引相同数据类型的值,并将转化后的偏移量作为起始行键的前缀;

将所述转化后的偏移量、所述分页参数中分页大小的值与1相加得到的结果作为中终止行键的前缀;

基于所述起始行键的前缀和所述终止行键的前缀在所述映射关系表中获取行键索引。

上述方案中,所述确定所获取的行键索引对应的第一数据包括:

基于所述行键索引在所述数据库中查找与所述行键索引对应的行键值为第一数据。

上述方案中,在所述数据库的getRowOrBefore函数中输入所述行键索引的数据结构能够表示的最大值,生成第二数据;所述第二数据中最后一行数据的行键值去除前缀的零后得到的值为所述数据库中总的数据量。

本发明所提供的数据处理方法及服务器,服务器建立数据库中的行键与行键索引的映射关系表;根据预设的分页参数中的偏移量和分页大小在所述映射关系表中获取行键索引;确定所获取的行键索引对应的第一数据;查询所述数据库中总的数据量,基于所述数据量和所述第一数据进行数据分页。如此,能够实现HBase在进行分页时能够根据偏移量和分页大小实现服务器对数据的分页;即能够实现对数据库内任意页数据的查询及轻量级的获取总的数据量。

附图说明

图1为本发明实施例提供的数据处理方法的实现流程示意图;

图2为本发明实施例提供的服务器的组成结构示意图。

具体实施方式

为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。

图1为本发明实施例提供的数据处理方法的实现流程示意图一,本示例中的数据处理方法应用于服务器,如图1所示,所述数据处理方法主要包括以下步骤:

步骤101,建立数据库中的行键与行键索引的映射关系表;

需要说明的是,本发明实施例所述的数据库均是指HBase;

具体地,服务器设置所述数据库中的行键对应的行键索引,存储行键与行键索引的对应关系为映射关系表;

这里,行键与行键索引的映射关系类似于书的章节与目录的对应关系,所述行键索引用于指示所述行键在数据库中的位置;由于HBase中存储的数据类型均是简单的字符串类型,因此,设置所述行键索引的数据结构为:serialNum_primaryRowKey;

其中,“serialNum”表示插入行键索引时数据的个数,serialNum可以采用10进制的数据类型,也可以采用16进制的数据类型;“primaryRowKey”表示数据库中的行键值;“_”表示连接符,用于分隔“serialNum”和“primaryRowKey”;

本发明实施例中以serialNum为10进制数据类型为例,所述映射关系表的内容如下:

00000000001_primaryRowKey1;

00000000002_primaryRowKey2;

00000000003_primaryRowKey3;

00000000004_primaryRowKey4;

......

00000000010_primaryRowKey10;

......

上述映射关系表中serialNum最多可以是11为定长的数字,则可以表征百亿条行键值。

由于HBase用于日志、用户行为等数据的存储,因此,HBase中的数据均会被永久保存而不被删除;但是,HBase中的数据会有添加、编辑等操作;在HBase中添加数据时,需要相应的更新所述行键与行键索引的映射关系表。

本发明实施例中,由于通过行键与行键索引的映射关系表来维护数据库中行键的索引关系,因此,并不影响数据库自身的特性,实现了数据库与映射关系表的完全解耦。

步骤102,根据预设的分页参数在所述映射关系表中获取行键索引;

其中,所述分页参数包括偏移量(offset)和分页大小(PageSize);

具体地,服务器将所述分页参数中的偏移量转化为与所述行键索引相同数据类型的值,并将转化后的偏移量作为起始行键的前缀;将所述转化后的偏移量、所述分页参数中分页大小的值与1相加得到的结果作为中终止行键的前缀;基于所述起始行键的前缀和所述终止行键的前缀在所述映射关系表中获取行键索引;

以所述offset值是38为例,服务器将offset表示为与所述行键索引相同的数据类型,即:00000000038,并将该值设置为起始行键的前缀;终止行键的前缀为OffSet+PageSize+1;计算终止行键的前缀时加1是指获取行键索引时,不包括终止行键对应的行键索引;

这里,利用HBase中的“Scan”功能设置起始行键和终止行键。

步骤103,确定所获取的行键索引对应的第一数据;

具体地,服务器基于所述行键索引在所述数据库中查找与所述行键索引对应的行键值为第一数据;

也就是说,服务器根据步骤102所获取的行键索引在HBase中查找与所述行键索引对应的行键值,读取所述行键值作为第一数据。

步骤104,查询所述数据库中总的数据量,基于所述数据量和所述第一数据进行数据分页;

具体地,服务器根据HBase中原生的函数Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception来查询所述数据库中总的数据量;对于Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception函数,在计算时,需确定要查找的行键和列簇;因此,该函数返回的实例是用户指定的行;若没有匹配的结果,函数返回值为null;

因此,在调用Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception函数时,我们输入的行键值为本实施例中serialNum能取得的最大数据,以11为serialNumber为例,首先,调用该函数时输入的行键值为“99999999999”;那么,函数返回的结果是按字典排序排在最尾端的一行;其中,调用函数时输入最大值“99999999999”,是为了能够获取到真实的数据量;如果输入的行键值过小,可能行键值不能覆盖数据库中所有的数据,导致得到的数据量非数据库中的真实数据量。

其次,获取最尾端一行数值的行键值,将行键值以连接符“_”进行分隔为两部分;其中,连接符“_”前面的部分去除前缀的零后得到的至为所述数据库中总的数据量;如:连接符“_”前面的部分为“00000001234”,那么,数据库中总的数据量则为1234个。

最后,利用现有技术中的分页方法根据数据库中总的数据量及第一数据对数据进行分页。

本发明实施例中,由于存储了数据库中行键与行键索引的映射关系表,实现了HBase在进行分页时能够根据偏移量和分页大小实现服务器对数据的分页;即能够实现对任意页数据的查询及轻量级的获取总的数据量。

图2为本发明实施例提供的服务器的组成结构示意图,如图2所示,所述服务器包括:建立单元11、获取单元12、确定单元13和分页单元14;其中,

所述建立单元11,用于建立数据库中的行键与行键索引的映射关系表;

所述获取单元12,用于根据预设的分页参数在所述映射关系表中获取行键索引;

所述确定单元13,用于确定所获取的行键索引对应的第一数据;

所述分页单元14,用于查询所述数据库中总的数据量,基于所述数据量和所述第一数据进行数据分页.

在一具体实施方式中,所述建立单元11,具体用于设置所述数据库中的行键对应的行键索引,存储行键与行键索引的对应关系为映射关系表;

本发明实施例中行键与行键索引的映射关系类似于书的章节与目录的对应关系,所述行键索引用于指示所述行键在数据库中的位置;所述的数据库均是指HBase,由于HBase中存储的数据类型均是简单的字符串类型,因此,所述建立单元11设置所述行键索引的数据结构为:serialNum_primaryRowKey;

其中,“serialNum”表示插入行键索引时数据的个数,serialNum可以采用10进制的数据类型,也可以采用16进制的数据类型;“primaryRowKey”表示数据库中的行键值;“_”表示连接符,用于分隔“serialNum”和“primaryRowKey”;

本发明实施例中以serialNum为10进制数据类型为例,所述映射关系表的内容如下:

00000000001_primaryRowKey1;

00000000002_primaryRowKey2;

00000000003_primaryRowKey3;

00000000004_primaryRowKey4;

......

00000000010_primaryRowKey10;

......

上述映射关系表中serialNum最多可以是11为定长的数字,则可以表征百亿条行键值。

由于HBase用于日志、用户行为等数据的存储,因此,HBase中的数据均会被永久保存而不被删除;但是,HBase中的数据会有添加、编辑等操作;在HBase中添加数据时,所述建立单元11,还用于更新所述行键与行键索引的映射关系表。

本发明实施例中,由于通过行键与行键索引的映射关系表来维护数据库中行键的索引关系,因此,并不影响数据库自身的特性,实现了数据库与映射关系表的完全解耦。

在一具体实施方式中,所述获取单元12,具体用于将所述分页参数中偏移量转化为与所述行键索引相同数据类型的值,并将转化后的偏移量作为起始行键的前缀;将所述转化后的偏移量、所述分页参数中分页大小的值与1相加得到的结果作为中终止行键的前缀;基于所述起始行键的前缀和所述终止行键的前缀在所述映射关系表中获取行键索引;

其中,所述分页参数包括offset和PageSize;

具体地,所述获取单元12将所述分页参数中的偏移量转化为与所述行键索引相同数据类型的值,并将转化后的偏移量作为起始行键的前缀;将所述转化后的偏移量、所述分页参数中分页大小的值与1相加得到的结果作为中终止行键的前缀;基于所述起始行键的前缀和所述终止行键的前缀在所述映射关系表中获取行键索引;

以所述offset值是38为例,所述获取单元12将offset表示为与所述行键索引相同的数据类型,即:00000000038,并将该值设置为起始行键的前缀;终止行键的前缀为OffSet+PageSize+1;计算终止行键的前缀时加1是指获取行键索引时,不包括终止行键对应的行键索引;

这里,利用HBase中的“Scan”功能设置起始行键和终止行键。

在一具体实施方式中,所述确定单元13,具体用于基于所述行键索引在所述数据库中查找与所述行键索引对应的行键值为第一数据;

也就是说,所述确定单元13根据所述获取单元12所获取的行键索引在HBase中查找与所述行键索引对应的行键值,读取所述行键值作为第一数据。

在一具体实施方式中,所述分页单元14,具体用于在所述数据库的getRowOrBefore函数中输入所述行键索引的数据结构能够表示的最大值,生成第二数据;所述第二数据中最后一行数据的行键值去除前缀的零后得到的值为所述数据库中总的数据量;

即:根据HBase中原生的函数Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception来查询所述数据库中总的数据量;对于Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception函数,在计算时,需确定要查找的行键和列簇;因此,该函数返回的实例是用户指定的行;若没有匹配的结果,函数返回值为null;

因此,在调用Result get Row OR Befor(byte[]row,byte[]family)throws IO Exception函数时,我们输入的行键值为本实施例中serialNum能取得的最大数据,以11为serialNumber为例,首先,调用该函数时输入的行键值为“99999999999”;那么,函数返回的结果是按字典排序排在最尾端的一行;其中,调用函数时输入最大值“99999999999”,是为了能够获取到真实的数据量;如果输入的行键值过小,可能行键值不能覆盖数据库中所有的数据,导致得到的数据量非数据库中的真实数据量。

其次,获取最尾端一行数值的行键值,将行键值以连接符“_”进行分隔为两部分;其中,连接符“_”前面的部分去除前缀的零后得到的至为所述数据库中总的数据量;如:连接符“_”前面的部分为“00000001234”,那么,数据库中总的数据量则为1234个。

最后,利用现有技术中的分页方法根据数据库中总的数据量及第一数据对数据进行分页。

本发明实施例所述的服务器,由于建立了数据库中行键与行键索引的映射关系表,实现了HBase在进行分页时能够根据偏移量和分页大小实现服务器对数据的分页;即能够实现对任意页数据的查询及轻量级的获取总的数据量

本领域技术人员应当理解,本发明实施例图2中所示的服务器中的各处理单元的实现功能,可参照前述显示控制方法的相关描述而理解。本领域技术人员应当理解,图2所示的服务器中各处理单元,可通过运行于处理器上的程序而实现,也可通过具体地逻辑电路而实现。

以上各实施例所述的电子设备中的建立单元11、获取单元12、确定单元13和分页单元14,在实际应用中均可由所述服务器中的中央处理器(CPU,Central Processing Unit)、数字信号处理器(DSP,Digital Signal Processor)或可编程门阵列(FPGA,Field-Programmable Gate Array)等实现。

本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。

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

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

另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。

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