基于分布式数据库HBase的结构化数据的快速检索***及方法
技术领域
本发明涉及一种结构化数据的快速检索***及方法,尤其是一种基于分布式数据库HBase的结构化数据的快速检索***及方法,属于结构化数据处理的技术领域。
背景技术
随着物联网技术的进步,社会正朝着一个“物与物连接”模式发展,当前全球智慧化项目的推广也在不断推动着物联网技术的发展。物联网指的是使物理对象和设备增加传感、计算和通信能力,将它们互相连接形成一个网络,并利用这个网络化对象产生集体效益。传感设备产生的数据具有海量、实时采样、高并发的特点,针对这些数据的存储问题,传统数据库解决方案出现瓶颈,无法满足数据的存储要求。
分布式NoSQL(not only SQL 非关系型)数据库HBase解决方案的出现很好的解决数据的存储问题,采用key-value(键-值)数据对的列式存储也很好的解决了数据的字段伸缩性。虽然分布式数据库HBase有许多的优点,很好的解决了数据的存储问题,但是分布式数据库HBase在检索方面存在一定的局限性。首先,分布式数据库HBase只支持针对Rowkey(HBase中每行的主键也就是key-value对中的key)的数据检索,不支持对value(值)的数据检索,而结构化的数据中的value才是数据的价值所在,分布式数据库HBase只提供对RowKey的一级索引检索,还有范围(BeginRowkey,EndRowkey)的scan(扫描,HBase API的一种,可以对响应的Rowkey数据做出快速响应)查询。对Value检索会导致MapReduce任务形式的全表的暴力检索,非常的耗时;再者,分布式数据库HBase不能很好的支持SQL语言,由于已经积累了多年针对关系型数据库的应用经验,有丰富的面向SQL的应用接口需求,把分布式数据库HBase的优点和SQL的易用性结合起来也是有待解决的问题。
发明内容
本发明的目的是克服现有技术中存在的不足,提供一种基于分布式数据库HBase的结构化数据的快速检索***及方法,其能快速得到目标数据,加快检索效率,实现对SQL语句的支持,达到对数据检索操作的方便易用。
按照本发明提供的技术方案,所述基于分布式数据库HBase的结构化数据的快速检索***,包括分布式数据库HBase***;在所述分布式数据库HBase***与客户端间设有二级索引***,所述二级索引***包括用于与客户端连接的SQL解析层以及用于与分布式数据库HBase***连接的DML数据操作接口;
所述SQL解析层能接收客户端传递的SQL语句解析并转换为对应DML操作,DML数据操作接口根据SQL解析层转换的DML操作对分布式数据库HBase***进行所需的读写操作。
通过DML数据操作接口向分布式数据库HBase***写入结构化数据时,将结构化数据的ID前添加Hash前缀,并存储在数据表格的数据主键内;同时,将结构化数据的ID、需要索引的字段前添加Hash前缀,并存储在索引表格的索引主键内。
在将结构化数据写入数据表格内时,每个结构化数据的ID后面的字段转化成列簇的字段,索引表格内列簇的字段为空。
对分布式数据库HBase***数据的写入包括实时数据的采集存储以及连线数据的批量导入。
一种基于分布式数据库HBase的结构化数据的快速检索方法,在所述分布式数据库HBase***与客户端间设有二级索引***,所述二级索引***包括用于与客户端连接的SQL解析层以及用于与分布式数据库HBase***连接的DML数据操作接口;
所述SQL解析层能接收客户端传递的SQL语句解析并转换为对应DML操作,DML数据操作接口根据SQL解析层转换的DML操作对分布式数据库HBase***进行所需的读写操作;
通过DML数据操作接口向分布式数据库HBase***写入结构化数据时,将结构化数据的ID前添加Hash前缀,并存储在数据表格的数据主键内;同时,将结构化数据的ID、需要索引的字段前添加Hash前缀,并存储在索引表格的索引主键内,以便快速检索。
在将结构化数据写入数据表格内时,每个结构化数据的ID后面的字段转化成列簇的字段,索引表格内列簇的字段为空。
本发明的优点:基于分布式数据库HBase***的非植入式开发,不会增加分布式数据库HBase***的逻辑复杂性,拥有很好的扩展性和兼容性;大幅提升了分布式数据库HBase***中对value数据的检索效率,能将SQL的易用性与分布式数据库HBase***完美结合,大大提升了分布式数据库HBase***的便捷性,同时也拓宽了分布式数据库HBase***的应用领域。
附图说明
图1为本发明的结构框图。
图2为本发明的流程图。
图3为本发明原始结构化数据进行存储后的示意图。
图4为本发明数据检索的过程示意图。
附图标记说明:1-客户端、2-二级索引***、3-分布式数据库HBase***、4-SQL解析层以及5-DML数据操作接口。
具体实施方式
下面结合具体附图和实施例对本发明作进一步说明。
如图1所示:能快速得到目标数据,加快检索效率,实现对SQL语句的支持,达到对数据检索操作的方便易用,本发明包括分布式数据库HBase***3;在所述分布式数据库HBase***3与客户端1间设有二级索引***2,所述二级索引***2包括用于与客户端1连接的SQL解析层4以及用于与分布式数据库HBase***3连接的DML数据操作接口5;
所述SQL解析层4能接收客户端1传递的SQL语句解析并转换为对应DML操作,DML数据操作接口5根据SQL解析层4转换的DML操作对分布式数据库HBase***3进行所需的读写操作。
具体地,二级索引***2承接客户端1与分布式数据库HBase***3之间的桥梁,封装分布式数据库HBase***3的API,为客户端1提供通用的使用接口。SQL解析层4针对SQL语句的解析层,负责将客户端1通过RPC远程调用传递过来的SQL语句进行语义解析,转换成为一系列的DML(Data Manipulation Language,是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,这四条命令是用来对分布式数据库HBase***里的数据进行操作的语言)操作。DML数据操作接口5主要是完成对HBase API的封装,内部分两种接口,一种是数据的写入接口,提供数据向分布式数据库HBase***3的数据输入;还有一种是数据的检索接口,提供通过检索从分布式数据库HBase***3中输出目标数据。数据的写入分为两种形式,一种是通过实时的数据采集存储,一种是离线的数据批量导入。
如图2所示,为客户端1的应用层调用到分布式数据库HBase***3之间的整体的数据流程图,其中包括两种数据流程,一个是数据的写入流程,另外一个是数据的检索流程。首先,客户端1通过RPC远程调用,传递过来应用层的SQL语句,SQL语句在SQL解析层4执行语义分析,通过对SQL语义分析获得的结果来判断数据是写入操作还是检索操作,比如insert(***)、update(更新)等都属于写入操作,而select(选择)操作就属于检索操作。对于数据的写入操作,由于不一定都是实时在线的数据写入,又开辟了离线批量数据导入,其中,离线批量数据导入是通过将采集来的数据写入到临时文件,在集群任务比较空闲的时候,通过对文件的处理,进行数据的批量导入,是一个非实时的过程。
在写入接口中,DML数据操作接口5完成SQL语义到HBase API中的put(写入)操作和delete(删除)操作,完成对分布式数据库HBase***3的数据***、更新和删除操作;在检索接口中,DML数据操作接口5主要是完成SQL语义到HBase API中的get(获取)操作和一系列的scan(扫描)操作,通过对索引表格的scan(扫描)操作查找出来目标数据的Rowkey(主键)集合,然后通过获取的Rowkey集合,通过get操作获得目标数据集合,最终将这些数据集合返回给客户端1。
如图3所示,为了能实现快速存储以及快速检索,本发明通过对主键的操作,把原结构化数据的主键部分和其中需要做索引的value字段设计在一起,由于分布式数据库HBase***3中数据存储的特性,所有数据都按照字典序排序,这样对于相同的value值的索引数据的存储位置相邻,通过对这些数据进行提取获取原存储数据的Rowkey数据。
图3中的原始数据就是结构化数据,每一条都由全表唯一的ID标记,每个ID代表的一行里面有代表不同意义的字段。在第二个表里面的数据就是原始数据写入到分布式数据库HBase***3中数据表格的详细情况,在原始结构化数据中的ID前面添加Hash前缀组成主键,以存储在数据表格的数据主键(DataRowky内),后面的字段都转化成列族ColumnFamily的字段。
由于结构化数据的顺序写入,会造成分布式数据库HBase***3中数据的写入局部热点,数据表格的主键以及索引表格的主键在分布式数据库HBase***3中是按照字典序排序的,如果顺序写入,造成短时间内写入的主键(Rowkey)都集中在集群中的局部节点,严重影响了写入的性能。通过添加了Hash前缀从而将顺序写入的数据通过Hash离散化分配到数据表格以及索引表格中不同的节点区域,充分利用分布式存储的并行存储优势。
在原始结构化数据写入分布式数据库HBase***3的同时,原始结构化数据中需要添加索引的字段要建立索引数据,并且与原结构化数据一同写入分布式数据库HBase***3的索引表格内。如图中标注的IndexRowkey(索引主键)的组成是由Hash前缀、需要建立索引的字段value和结构化数据的ID组成的,在索引表格的列簇的字段空的,只是***一条空的索引主键作为数据主键所标示的反向索引,采用空间换时间的策略,通过建立索引数据表格最终能够大幅度提升***查询的速度。
如图4所示,给出了实例来解释***的检索中获取Rowkey(主键)集合的流程。例子中举了对于两个条件的数据select检索请求。最左边的是数据在分布式数据库HBase***3中的存储状态,标示着原始结构化数据写入到分布式数据库HBase***3存储之后的状态,接着右边的两个索引表格分别是数据的prov字段索引和age字段索引,在搜索省份prov为北京bj同时年龄age为20的条目信息的时候执行流程是这样的,并行的在prov和age字段分别进行prov字段为bj和age为20的搜索,通过检索查询得到的两个集合就是后来的prov=bj集合与age=20集合,通过对SQL语句中两个字段条件的逻辑关系判断发现是“and”,那就对两个集合求交集通过合并操作,最终发现主键的交集为0001,接下来拿着0001去数据表格中取出目标数据,返回给客户端1就完成了***的检索流程。由于此处只是为了说明下整个***设计的原理,简化了分布式数据库HBase***3中主键的设置与检索流程中的一些其他的辅助措施。
本发明基于分布式数据库HBase***3的非植入式开发,不会增加分布式数据库HBase***3的逻辑复杂性,拥有很好的扩展性和兼容性;大幅提升了分布式数据库HBase***3中对value数据的检索效率,能将SQL的易用性与分布式数据库HBase***3完美结合,大大提升了分布式数据库HBase***3的便捷性,同时也拓宽了分布式数据库HBase***3的应用领域。