CN104750815A - 一种基于HBase的Lob数据的存储方法及装置 - Google Patents

一种基于HBase的Lob数据的存储方法及装置 Download PDF

Info

Publication number
CN104750815A
CN104750815A CN201510144162.7A CN201510144162A CN104750815A CN 104750815 A CN104750815 A CN 104750815A CN 201510144162 A CN201510144162 A CN 201510144162A CN 104750815 A CN104750815 A CN 104750815A
Authority
CN
China
Prior art keywords
data
lob
data block
file
unloading
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510144162.7A
Other languages
English (en)
Other versions
CN104750815B (zh
Inventor
贾德星
徐正礼
魏金雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Group Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Group Co Ltd filed Critical Inspur Group Co Ltd
Priority to CN201510144162.7A priority Critical patent/CN104750815B/zh
Publication of CN104750815A publication Critical patent/CN104750815A/zh
Application granted granted Critical
Publication of CN104750815B publication Critical patent/CN104750815B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种基于HBase的Lob数据的存储方法及装置,方法包括:在向LobTable对象发送存储请求时,LobTable在确定存储请求携带Lob数据,创建LobPut对象;将Lob数据写入LobPut对象提供的Lob输出流中;LobPut对象在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象;将生成的Put对象提交至服务器端,以使服务器端根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。根据本方案,从而降低了客户端的工作量,提高了针对数据存储至HBase的存储方式的实用性。

Description

一种基于HBase的Lob数据的存储方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种基于HBase的Lob数据的存储方法及装置。
背景技术
HBase(分布式存储***)是一个分布式、面向列的开源数据库,可实现几十亿、上百亿的数据存储。当对处理大对象(Large Object,LOB)数据,如文档、音乐、视频等数据进行存储时,可能会存在如下问题:
1、HBase在进行底层存储时是以KeyValue形式进行存储的,当客户端向服务器端更新数据时,服务器端先把待更新的KeyValue对象存储在内存(MemStore)中,当内存中的存储的KeyValue对象达到阈值时,再将该达到阈值的KeyValue对象存储为StoreFiel,因此,如果KeyValue值过大,容易造成服务器端内存溢出;
2、HBase表在进行数据存储时,会根据行关键字(RowKey)拆分为多个分区(Region),每个分区包括多个HFile文件。而由于Lob数据列值很大,所以HFile文件容易超出分区限制,从而进行拆分并形成大量的分区,而每个分区只有很少的行,过多的分区数量使得对HBase表数据的扫描(Scan)效率比较低。
针对上述问题,在客户端需要存储Lob数据时往往会结合HDFS(分布式文件***)进行辅助,客户端将Lob数据存储到HDFS中,而将其他结构化数据存储到HBase中。由于客户端在针对Lob数据和其他结构化数据存储时,需要利用这两种数据库(HBase和HDFS)分别进行存储,需要客户端分别针对每一种数据库的存储方式进行大量编程处理,因此,该存储方式实用性较低。
发明内容
有鉴于此,本发明提供一种基于HBase的Lob数据的存储方法及装置,在保证实用性的前提下实现大对象数据存储的问题。
本发明提供了一种基于HBase的Lob数据的存储方法,根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;设置HBase所对应的服务器向HDFS转存数据的转存进制,还包括:
客户端在向LobTable对象发送存储请求时,LobTable在确定所述存储请求中包括Qualifier时,确定所述存储请求携带Lob数据,则创建LobPut对象;
客户端将所述存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中;
LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号;
将生成的Put对象提交至服务器端,以使服务器端根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
优选地,
进一步包括:客户端调用LobTable对象向服务器端提交scan请求,其中,所述查询请求用于查询服务器端的Lob数据,并接收服务器端针对所述查询请求返回的Result,所述Result包括所述查询请求所查询的Lob数据的Row Key;LobTable对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。
本发明还提供了一种基于HBase的大对象数据的存储方法,创建LobCorprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制,还包括:
服务器端利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号;
根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;
并根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
优选地,进一步包括:通过调用PrePut对象抛出一个特定的Do Not RetryIO Exception的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HBase的操作。
优选地,
进一步包括:创建读取数据的LobScanner对象;
进一步包括:接收客户端通过LobGet提交的Get对象,所述Get对象中包括所查询的Lob数据的Row Key;Lob Corprocessor打开LobScanner对象;LobScanner对象根据所述Get对象中的Row Key确定所查询的Lob数据的存储位置,并在确定的存储位置中分块读取Lob数据的各个数据块,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端;
或,
进一步包括:LobStore进一步以HFile文件的形式和MemStore形式存储Lob数据;
进一步包括:遍历HDFS中的Lob文件,并将遍历到的小于第二阈值的多个Lob数据合并到HFile文件中;
进一步包括:将合并为HFile文件的多个Lob数据的删除信息存储至MemStore中。
本发明还提供了一种客户端,包括:
扩展单元,用于根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;
处理单元,用于在向LobTable对象发送存储请求时,LobTable在确定所述存储请求中包括Qualifier时,确定所述存储请求携带Lob数据,则创建LobPut对象;
写入单元,用于将所述存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中;
接收单元,用于利用LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号;
提交单元,用于将生成的Put对象提交至服务器端,以使服务器端根据预先设置的HBase所对应的服务器向HDFS转存数据的转存进制,以及根据提交的Put对象中所包括的块号的顺序,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
优选地,
进一步包括:数据查询单元,用于调用LobTable对象向服务器端提交查询请求,其中,所述查询请求用于查询服务器端的Lob数据,并接收服务器端针对所述查询请求返回的Result,所述Result包括所述查询请求所查询的Lob数据的Row Key;LobTable对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。
本发明还提供了一种服务器,包括:
存储单元,用于创建Lob Corprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制;
接收单元,用于利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号;
处理单元,用于根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;
转存单元,用于根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
优选地,
进一步包括:阻止单元,用于通过调用PrePut对象抛出一个特定的DoNot Retry IO Exception的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HBase的操作。
优选地,
所述存储单元,用于创建读取数据的LobScanner对象;
进一步包括:查询单元,用于接收客户端通过LobGet提交的Get对象,所述Get对象中包括所查询的Lob数据的Row Key;Lob Corprocessor打开LobScanner对象;LobScanner对象根据所述Get对象中的Row Key确定所查询的Lob数据的存储位置,并在确定的存储位置中分块读取Lob数据的各个数据块,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端;
或,
进一步包括:LobStore进一步以HFile文件的形式和MemStore形式存储Lob数据;
进一步包括:遍历单元,用于遍历HDFS中的Lob文件,并将遍历到的小于第二阈值的多个Lob数据合并到HFile文件中;
进一步包括:合并单元,用于将合并为HFile文件的多个Lob数据的删除信息存储至MemStore中。
本发明实施例提供了一种基于HBase的Lob数据的存储方法及装置,在将Lob数据存储到服务器端时,由客户端根据预设值,分块上传Lob数据至HBase的服务器端,由服务器端根据分块上传的数据块进行存储,从而避免了服务器端内存溢出的问题。另外,为了避免客户端学习两种存储技术,客户端可以将Lob数据随其他结构化数据均上传至服务器端,由服务器端将Lob数据转存至HDFS中的Lob文件中,客户端只需对数据存储至HBase的存储方式进行编程,从而降低了客户端的工作量,提高了针对数据存储至HBase的存储方式的实用性。
附图说明
图1是本发明实施例提供的方法流程图;
图2是本发明另一实施例提供的方法流程图;
图3是本发明又一实施例提供的方法流程图;
图4是本发明实施例提供的数据存储方法示意图;
图5是本发明实施例提供的数据查询方法示意图;
图6是本发明实施例提供的客户端结构示意图;
图7是本发明实施例提供的服务器结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种基于HBase的Lob数据的存储方法,根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;设置HBase所对应的服务器向HDFS转存数据的转存进制,该方法可以包括以下步骤:
步骤101:客户端在向LobTable对象发送存储请求时,LobTable在确定存储请求中包括Qualifier时,确定存储请求携带Lob数据,则创建LobPut对象。
步骤102:客户端将存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中。
步骤103:LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号。
步骤104:将生成的Put对象提交至服务器端,以使服务器端根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
根据上述方案,在将Lob数据存储到服务器端时,由客户端根据预设值,分块上传Lob数据至HBase的服务器端,由服务器端根据分块上传的数据块进行存储,从而避免了服务器端内存溢出的问题。另外,为了避免客户端学习两种存储技术,客户端可以将Lob数据随其他结构化数据均上传至服务器端,由服务器端将Lob数据转存至HDFS中的Lob文件中,客户端只需对数据存储至HBase的存储方式进行编程,从而降低了客户端的工作量,提高了针对数据存储至HBase的存储方式的实用性。
如图2所示,本发明实施例提供了一种基于HBase的大对象数据的存储方法,创建Lob Corprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制,该方法可以包括以下步骤:
步骤201:服务器端利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号。
步骤202:根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中。
步骤203:并根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
根据上述方案,服务器端根据分块上传的数据块进行分块存储,从而避免了服务器端内存溢出的问题。另外,为了避免客户端学习两种存储技术,客户端可以将Lob数据随其他结构化数据均上传至服务器端,由服务器端将Lob数据转存至HDFS中的Lob文件中,客户端只需对数据存储至HBase的存储方式进行编程,从而降低了客户端的工作量,提高了针对数据存储至HBase的存储方式的实用性。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
如图3所示,本发明实施例提供了一种基于HBase的大对象数据的存储方法,该方法可以包括以下步骤:
步骤301:构建存储模型,服务器端为每个Region关联一个对应的LobStore,并设置HBase的服务器端向HDFS转存数据的转存机制。
如图4所示,在本实施例中,LobStore在存储对象时可以使用下述三种形式进行存储:
Lob文件:Lob文件存储于HDFS中,当客户端在向服务器端存储Lob对象时,由服务器端将Lob对象转存入HDFS中的Lob文件中,其中,Lob对象的原始值(视频文件的二进制值)直接存储在HDFS,每次Put值都是直接写lob文件。其中,存储为Lob文件的文件名可以包括:row+列族+列名;其目录为:table目录/region/Lob。
HFile:用于将小Lob对象组合成HFile,避免在HDFS上产生大量小对象文件。此类文件是在表压缩时产生的。其中,存储为HFile的key值可以包括:业务表row+f+q,Value值可以包括:小Lob值或DEL。
MemStore:记录Lob对象的Deleted,其作用是在表压缩时用来清除已经删除的小Lob对象。
在本实施例中,可以对Lob列进行如下定义:在HBase Table的[Family+Qualifier]级别定义,声明某个表的Qualifier是否Lob列。当接收到存储请求或查询请求时,可以根据该Qualifier确定所存储或所查询的数据是否为Lob对象。
进一步地,可以定义“大Lob数据”和“小Lob数据”的阈值,例如,该阈值为10M,小于该阈值的Lob数据称之为“小Lob数据”,该小Lob数据使用HFile格式进行存储,大于该阈值的Lob数据称之为“大Lob数据”,该大Lob数据存储为HDFS中单对单的Lob文件。
步骤302:客户端向HBase的服务器端实现数据存储。
如图4所示,在本实施例中,客户端可以通过如下方式向HBase的服务器端实现数据存储或更新(put):
1、客户端向LobTable对象发送存储put请求。
2、LobTable在确定put请求中携带结构化数据时,该结构化数据如二维表类型的数据,向服务器端提交该Put请求,并执行3步骤;在确定put请求中携带非结构化数据时,该非结构化数据如Lob数据,执行4步骤。
3、将结构化数据正常存储至HBase数据库中的HBase Store中。
4、LobTable创建LobPut对象。
5、客户端将put请求中携带的Lob数据写入LobPut对象所提供的Lob输出流中。其中,该Lob输出流可以看作是客户端的该LobPut对象向服务器端发送的数据流。
6、LobPut对象接收写入了Lob数据的Lob输出流,并分块读取Lob数据,并将分块读取的Lob数据的数据块分别生成对应的Put对象。其中,设定分块读取的阈值可以是4M。例如,每次读取Lob数据满4M时所对应的数据块。其中,当读取到最后一个Lob数据的数据块时,该数据块可能不满4M。
7、将各个Put对象提交至服务器端的HRegion,其中,Put对象包括相应数据块在Lob数据中的块号。
8、服务器端所创建的Lob Corprocessor分块接收各个Put对象对应的数据块。
9、Lob Corprocessor利用设置的转存机制,将接收到的各个Put对象所对应的数据块依次转存至HDFS中的Lob文件中。
在本步骤9中,Lob Corprocessor根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;并根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
在上述步骤处理结束后,还可以包括:通过调用PrePut对象抛出一个特定的Do Not Retry IO Exception的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HFile的操作。
其中,客户端新定义的2个新的API:LobTable、LobPut,分别继承自HBase原来的类:HTable和Put。其中,LobTable、LobPut都可以理解为客户端上的接口。另外,客户端在存储Lob数据之前,还可以提交lob列值为byte[0]的Put对象,以将主键存储至HBase中。
步骤303:客户端实现向HBase的服务器端实现数据查询。
如图5所示,在本实施例中,客户端实现向HBase的服务器端的数据查询时,可以扩展如下三个API:LobTable、LobResult和LobGet,可以通过如下方式实现数据查询(scan):
1、客户端向LobTable对象发送Scan请求。
2、LobTable对象向服务器端提交该Scan请求。
3、服务器端的HRegion根据该Scan请求向客户端返回Result。其中,该Result中包括scan请求所查询的Lob数据的Row Key。
4、LobTable对象根据Result中包括Row Key,将Result封装为LobResult对象。
5、LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象。
6、LobGet对象根据所查询的Lob数据所对应的每一块数据块的起始地址向服务器端分块读取Lob数据。其中,LobGet对象也需要分块读取Lob数据,分块读取的阈值可以是4M,LobGet对象根据Lob数据每个数据块的起始地址,向服务器端分块读取。
7、HRegion接收客户端通过LobGet提交的Get对象,Get对象中包括所查询的Lob数据的Row Key。
8、Lob Corprocessor打开LobScanner对象。
9、LobScanner对象根据Get对象中的Row Key,确定Lob数据的存储位置是HFile还是Lob文件,若存储位置是HFile,则直接读取KeyValue值返回给客户端的LobGet对象,并返回给客户端EOF结束标识,若存储位置是Lob文件,LobScanner对象根据每个数据块的起始地址,读取各个数据库,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端中的LobGet对象。并返回给客户端EOF结束标识。
10、客户端根据LobGet对象提供的输入流中读取数据。其中,该输入流可以看作是LobPut对象从服务器端获取数据的数据流。
在本实施例中,由于对某些应用场景中的Lob数据的大小不太确定,比如网盘应用中存储的文件可能有几kb,也可能有几百MB或上GB。如果将所有的Lob数据均存储在HDFS中的Lob文件中,那么过多的小文件可能会影响HDFS***的效率。因此,可以将HDFS中Lob文件中的小Lob数据进行compact(合并)。
由于对于小Lob数据的问题,hadoop自身提供了三种解决方案:HadoopArchive、Sequence File和CombineFileInputFormat。但是这些方案中,小文件一旦合并到大的归档文件中就无法删除和修改,除非重新打包。因此,本实施例中,可以遍历HDFS中的Lob文件,将多个小于10M的小Lob数据进行合并,并保证合并的文件不大于另一个阈值,如,1G,并将合并后的文件存储到HBase中,存储格式为HFile。实际上HFile的内容也是不能修改删除的,对标记为DELETE的小lob KV,还是通过Major Compact进行清理。也就是遍历多个HFile,清理KV并生成新的HFile文件。
在本实施例中,可以由Lob Corprocessor判断是否lob列删除(包括整行删除、整个列族删除),然后生成lob列的delete对象,并存储到memstore,同时删除hdfs的lob文件(如果有)。
在本实施例中,由于LobStore是与一个Region关联的,因此在Region进行split(拆分)时,LobStore也需要split。其中,Lob文件的split只需要移动到不同目录即可。另外,HFile的split则需要全部遍历,并根据split key进行拆分到不同的Region。
如图6所示,本发明实施例还提供了一种客户端,包括:
扩展单元601,用于根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;
处理单元602,用于在向LobTable对象发送存储请求时,LobTable在确定所述存储请求中包括Qualifier时,确定所述存储请求携带Lob数据,则创建LobPut对象;
写入单元603,用于将所述存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中;
接收单元604,用于利用LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号;
提交单元605,用于将生成的Put对象提交至服务器端,以使服务器端根据预先设置的HBase所对应的服务器向HDFS转存数据的转存进制,以及根据提交的Put对象中所包括的块号的顺序,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
进一步包括:数据查询单元606,用于调用LobTable对象向服务器端提交查询请求,其中,所述查询请求用于查询服务器端的Lob数据,并接收服务器端针对所述查询请求返回的Result,所述Result包括所述查询请求所查询的Lob数据的Row Key;LobTable对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。
如图7所示,本发明实施例还提供了一种服务器,包括:
存储单元701,用于创建Lob Corprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制;
接收单元702,用于利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号;
处理单元703,用于根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;
转存单元704,用于根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
进一步包括:阻止单元705,用于通过调用PrePut对象抛出一个特定的Do Not Retry IO Exception的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HBase的操作。
所述存储单元,用于创建读取数据的LobScanner对象;
进一步包括:查询单元706,用于接收客户端通过LobGet提交的Get对象,所述Get对象中包括所查询的Lob数据的Row Key;Lob Corprocessor打开LobScanner对象;LobScanner对象根据所述Get对象中的Row Key确定所查询的Lob数据的存储位置,并在确定的存储位置中分块读取Lob数据的各个数据块,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端;
或,
进一步地,LobStore进一步以HFile文件的形式和MemStore形式存储Lob数据;
进一步包括:遍历单元707,用于遍历HDFS中的Lob文件,并将遍历到的小于第二阈值的多个Lob数据合并到HFile文件中;
进一步包括:合并单元708,用于将合并为HFile文件的多个Lob数据的删除信息存储至MemStore中。
如上所述,本发明实施例至少可以包括如下有益效果:
1、在将Lob数据存储到服务器端时,由客户端根据预设值,分块上传Lob数据至HBase的服务器端,由服务器端根据分块上传的数据块进行存储,从而避免了服务器端内存溢出的问题。
2、为了避免客户端学习两种存储技术,客户端可以将Lob数据随其他结构化数据均上传至服务器端,由服务器端将Lob数据转存至HDFS中的Lob文件中,客户端只需对数据存储至HBase的存储方式进行编程,从而降低了客户端的工作量,提高了针对数据存储至HBase的存储方式的实用性。
上述设备内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种基于HBase的Lob数据的存储方法,其特征在于,根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;设置HBase所对应的服务器向HDFS转存数据的转存进制,还包括:
客户端在向LobTable对象发送存储请求时,LobTable在确定所述存储请求中包括Qualifier时,确定所述存储请求携带Lob数据,则创建LobPut对象;
客户端将所述存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中;
LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号;
将生成的Put对象提交至服务器端,以使服务器端根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
2.根据权利要求1所述的方法,其特征在于,
进一步包括:客户端调用LobTable对象向服务器端提交scan请求,其中,所述查询请求用于查询服务器端的Lob数据,并接收服务器端针对所述查询请求返回的Result,所述Result包括所述查询请求所查询的Lob数据的Row Key;LobTable对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。
3.一种基于HBase的大对象数据的存储方法,其特征在于,创建LobCorprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制,还包括:
服务器端利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号;
根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;
并根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
4.根据权利要求3所述的方法,其特征在于,
进一步包括:通过调用PrePut对象抛出一个特定的Do Not Retry IOException的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HBase的操作。
5.根据权利要求3或4所述的方法,其特征在于,
进一步包括:创建读取数据的LobScanner对象;
进一步包括:接收客户端通过LobGet提交的Get对象,所述Get对象中包括所查询的Lob数据的Row Key;Lob Corprocessor打开LobScanner对象;LobScanner对象根据所述Get对象中的Row Key确定所查询的Lob数据的存储位置,并在确定的存储位置中分块读取Lob数据的各个数据块,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端;
或,
进一步包括:LobStore进一步以HFile文件的形式和MemStore形式存储Lob数据;
进一步包括:遍历HDFS中的Lob文件,并将遍历到的小于第二阈值的多个Lob数据合并到HFile文件中;
进一步包括:将合并为HFile文件的多个Lob数据的删除信息存储至MemStore中。
6.一种客户端,其特征在于,包括:
扩展单元,用于根据HTable对象扩展LobTable对象;设置用于识别Lob数据的Qualifier;
处理单元,用于在向LobTable对象发送存储请求时,LobTable在确定所述存储请求中包括Qualifier时,确定所述存储请求携带Lob数据,则创建LobPut对象;
写入单元,用于将所述存储请求中携带的Lob数据写入LobPut对象提供的Lob输出流中;
接收单元,用于利用LobPut对象接收写入了Lob数据的Lob输出流,并在每次接收到的满足第一阈值的数据块时,将满足该第一阈值的数据块生成相应的Put对象,其中,Put对象包括相应数据块在Lob数据中的块号;
提交单元,用于将生成的Put对象提交至服务器端,以使服务器端根据预先设置的HBase所对应的服务器向HDFS转存数据的转存进制,以及根据提交的Put对象中所包括的块号的顺序,将各个Put对象对应的数据块依次转存至HDFS的Lob文件中。
7.根据权利要求6所述的客户端,其特征在于,
进一步包括:数据查询单元,用于调用LobTable对象向服务器端提交查询请求,其中,所述查询请求用于查询服务器端的Lob数据,并接收服务器端针对所述查询请求返回的Result,所述Result包括所述查询请求所查询的Lob数据的Row Key;LobTable对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。
8.一种服务器,其特征在于,包括:
存储单元,用于创建Lob Corprocessor,设置HBase所对应的服务器向HDFS转存数据的转存进制;
接收单元,用于利用Lob Corprocessor分块接收客户端分块提交的各个Put对象,其中,每个Put对象包括相应数据块在其对应Lob数据中的块号;
处理单元,用于根据首次接收到的Put对象所对应数据块,确定HDFS***的Lob文件中当前是否包括与该数据块相关的数据,若是,利用设置的转存机制将首次接收到的Put对象所对应的数据块,对与其相关的数据进行更新;若否,利用设置的转存机制,将首次接收到的Put对象所对应的数据块,创建至Lob文件中;
转存单元,用于根据提交的Put对象中所包括的块号的顺序,利用设置的转存机制,将后续接收到的Put对象分别对应的数据块转存入Lob文件中,并根据每个数据块的块号将各个数据块组合为Lob数据。
9.根据权利要求8所述的服务器,其特征在于,
进一步包括:阻止单元,用于通过调用PrePut对象抛出一个特定的DoNot Retry IO Exception的子类异常,以阻止Lob Corprocessor将各个Put对象所对应的数据块写入到HBase的操作。
10.根据权利要求8或9所述的服务器,其特征在于,
所述存储单元,用于创建读取数据的LobScanner对象;
进一步包括:查询单元,用于接收客户端通过LobGet提交的Get对象,所述Get对象中包括所查询的Lob数据的Row Key;Lob Corprocessor打开LobScanner对象;LobScanner对象根据所述Get对象中的Row Key确定所查询的Lob数据的存储位置,并在确定的存储位置中分块读取Lob数据的各个数据块,并将各个数据块转换为KeyValue形式,使得服务器端将该KeyValue形式的各个数据块返回给客户端;
或,
进一步包括:LobStore进一步以HFile文件的形式和MemStore形式存储Lob数据;
进一步包括:遍历单元,用于遍历HDFS中的Lob文件,并将遍历到的小于第二阈值的多个Lob数据合并到HFile文件中;
进一步包括:合并单元,用于将合并为HFile文件的多个Lob数据的删除信息存储至MemStore中。
CN201510144162.7A 2015-03-30 2015-03-30 一种基于HBase的Lob数据的存储方法及装置 Active CN104750815B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510144162.7A CN104750815B (zh) 2015-03-30 2015-03-30 一种基于HBase的Lob数据的存储方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510144162.7A CN104750815B (zh) 2015-03-30 2015-03-30 一种基于HBase的Lob数据的存储方法及装置

Publications (2)

Publication Number Publication Date
CN104750815A true CN104750815A (zh) 2015-07-01
CN104750815B CN104750815B (zh) 2017-11-03

Family

ID=53590499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510144162.7A Active CN104750815B (zh) 2015-03-30 2015-03-30 一种基于HBase的Lob数据的存储方法及装置

Country Status (1)

Country Link
CN (1) CN104750815B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391653A (zh) * 2016-09-21 2017-11-24 广州特道信息科技有限公司 一种分布式NewSQL数据库***及图片数据储存方法
CN111367857A (zh) * 2020-03-03 2020-07-03 中国联合网络通信集团有限公司 数据存储方法、装置、ftp服务器及存储介质
CN111694847A (zh) * 2020-06-04 2020-09-22 贵州易鲸捷信息技术有限公司 一种特大lob数据高并发低延迟的更新访问方法
CN112214458A (zh) * 2020-10-19 2021-01-12 珠海金山网络游戏科技有限公司 数据转存储方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102750300A (zh) * 2011-12-27 2012-10-24 浙江大学 一种支持多粒度查询的高性能非结构化数据存取协议
CN103299267A (zh) * 2010-12-20 2013-09-11 销售力网络公司 用于执行多租户存储中的交叉存储连接的方法和***
WO2014031618A2 (en) * 2012-08-22 2014-02-27 Bitvore Corp. Data relationships storage platform
US20140081918A1 (en) * 2012-09-18 2014-03-20 Mapr Technologies, Inc. Table format for map reduce system
US20150058354A1 (en) * 2013-08-20 2015-02-26 Raytheon Company System and methods for storing and analyzing geographically-referenced data

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103299267A (zh) * 2010-12-20 2013-09-11 销售力网络公司 用于执行多租户存储中的交叉存储连接的方法和***
CN102750300A (zh) * 2011-12-27 2012-10-24 浙江大学 一种支持多粒度查询的高性能非结构化数据存取协议
WO2014031618A2 (en) * 2012-08-22 2014-02-27 Bitvore Corp. Data relationships storage platform
US20140081918A1 (en) * 2012-09-18 2014-03-20 Mapr Technologies, Inc. Table format for map reduce system
US20150058354A1 (en) * 2013-08-20 2015-02-26 Raytheon Company System and methods for storing and analyzing geographically-referenced data

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391653A (zh) * 2016-09-21 2017-11-24 广州特道信息科技有限公司 一种分布式NewSQL数据库***及图片数据储存方法
CN111367857A (zh) * 2020-03-03 2020-07-03 中国联合网络通信集团有限公司 数据存储方法、装置、ftp服务器及存储介质
CN111694847A (zh) * 2020-06-04 2020-09-22 贵州易鲸捷信息技术有限公司 一种特大lob数据高并发低延迟的更新访问方法
CN112214458A (zh) * 2020-10-19 2021-01-12 珠海金山网络游戏科技有限公司 数据转存储方法及装置
CN112214458B (zh) * 2020-10-19 2023-08-11 珠海金山数字网络科技有限公司 数据转存储方法及装置

Also Published As

Publication number Publication date
CN104750815B (zh) 2017-11-03

Similar Documents

Publication Publication Date Title
JP6778795B2 (ja) データを記憶するための方法、装置及びシステム
US8683112B2 (en) Asynchronous distributed object uploading for replicated content addressable storage clusters
US8200633B2 (en) Database backup and restore with integrated index reorganization
CN103714123B (zh) 企业云存储分块对象重复数据删除和重组版本控制方法
CN113986873B (zh) 一种海量物联网数据模型化的处理、存储与共享方法
US8321487B1 (en) Recovery of directory information
CN106484820B (zh) 一种重命名方法、访问方法及装置
US20140101167A1 (en) Creation of Inverted Index System, and Data Processing Method and Apparatus
CN102375853A (zh) 分布式数据库***、在其中建立索引的方法和查询方法
CN103955530A (zh) 一种在线重复数据删除***的数据重建优化方法
KR20130049111A (ko) 분산 처리를 이용한 포렌식 인덱스 방법 및 장치
CN104978330A (zh) 一种数据存储的方法及装置
US20130191328A1 (en) Standardized framework for reporting archived legacy system data
CN110888837B (zh) 对象存储小文件归并方法及装置
Su et al. Taming massive distributed datasets: data sampling using bitmap indices
CN104881466A (zh) 数据分片的处理以及垃圾文件的删除方法和装置
CN104750815A (zh) 一种基于HBase的Lob数据的存储方法及装置
CN112912870A (zh) 租户标识符的转换
Changtong An improved HDFS for small file
CN112084190A (zh) 一种基于大数据的采集数据实时存储与管理***和方法
CN105224663A (zh) 一种基于多个数据源的数据访问任务管理方法及装置
CN110633261A (zh) 一种图片存储方法、图片查询方法及装置
CN102207964B (zh) 实时海量数据索引建立方法及***
CN113448946A (zh) 数据迁移方法及装置、电子设备
CN105631010A (zh) 一种基于hdfs小文件存储的优化方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20180807

Address after: 250100 S06 tower, 1036, Chao Lu Road, hi tech Zone, Ji'nan, Shandong.

Patentee after: Shandong wave cloud Mdt InfoTech Ltd

Address before: No. 1036, Shandong high tech Zone wave road, Ji'nan, Shandong

Patentee before: Inspur Group Co., Ltd.

TR01 Transfer of patent right
CP03 Change of name, title or address

Address after: 250100 No. 1036 Tidal Road, Jinan High-tech Zone, Shandong Province, S01 Building, Tidal Science Park

Patentee after: Inspur cloud Information Technology Co., Ltd

Address before: 250100 Ji'nan science and technology zone, Shandong high tide Road, No. 1036 wave of science and Technology Park, building S06

Patentee before: SHANDONG LANGCHAO YUNTOU INFORMATION TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address