一种基于HBase的Lob数据的存储方法及装置制造方法及图纸

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

【技术实现步骤摘要】

本专利技术涉及计算机
,特别涉及一种基于HBase的Lob数据的存储方法及 目.ο
技术介绍
HBase (分布式存储系统)是一个分布式、面向列的开源数据库,可实现几十亿、上百亿的数据存储。当对处理大对象(Large Object, LOB)数据,如文档、音乐、视频等数据进行存储时,可能会存在如下问题:UHBase在进行底层存储时是以KeyValue形式进行存储的,当客户端向服务器端更新数据时,服务器端先把待更新的KeyValue对象存储在内存(MemStore)中,当内存中的存储的KeyValue对象达到阈值时,再将该达到阈值的KeyValue对象存储为StoreFiel,因此,如果KeyValue值过大,容易造成服务器端内存溢出;2、HBase表在进行数据存储时,会根据行关键字(RowKey)拆分为多个分区(Reg1n),每个分区包括多个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 Retry1Except1n的子类异常,以阻止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 ;LobTabIe对象将所述Result封装为LobResult对象,LobResult对象根据所查询的Lob数据的Row Key生成LobGet对象,以使LobGet对象根据所查询的Lob数据所对应的每一块数据块在Lob数据中的起始地址向服务器端分块读取Lob数据。本专利技术还提供了一种服务器,包括:存储单元,用于创建Lob Corprocessor,设置HBase所本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104750815.html" title="一种基于HBase的Lob数据的存储方法及装置原文来自X技术">基于HBase的Lob数据的存储方法及装置</a>

【技术保护点】
一种基于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文件中。

【技术特征摘要】

【专利技术属性】
技术研发人员:贾德星徐正礼魏金雷
申请(专利权)人:浪潮集团有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1