Hbase学习rowKey设计-4
hbase学习 rowKey的设计-4
只有三种方法可以访问hbase表中的行:
1通过单行键访问
范围通过行键2
3全表扫描
Hadoop序列文件
本文可能涉及的应用编程接口:
Hadoop/HDFS :3358 Hadoop . Apache . org/common/docs/current/API/
hbase :http://hbase . Apache . org/API docs/index . html overview-summary . html
Begin!
HBase的查询实现只提供了两种方式:
1.根据指定的RowKey,get方法获取唯一的记录(org.apache.hadoop.hbase.client.Get)
2.根据指定的条件,使用扫描方法获得一批记录(org.apache.hadoop.hbase.client.Scan)
实现条件查询功能,采用扫描方式,使用扫描时需要注意以下几点:
1.扫描可以通过setcache和setBatch方法提高速度(用空间换取时间);
2.可以通过setStartRow和setEndRow来限制扫描。范围越小,性能越高。
通过巧妙的RowKey设计,我们可以让批处理记录集合中的元素靠得很近(应该在同一个Region下),在遍历结果的时候可以得到很好的性能。
3.scan可以通过setFilter方法添加过滤器,这也是分页和多条件查询的基础。
下面是一个图像示例:
我们在表中存储文件信息,每个文件有五个属性:文件id(长,全局唯一)、创建时间(长)、文件名(字符串)、类别名(字符串)和所有者(用户)。
我们可以输入查询条件:文件创建的时间间隔(例如2012年9月1日至2012年9月14日创建的文件)、文件名(“中国之声”)、类别(“综艺”)和所有者(“浙江卫视”)。
假设我们目前有以下文档:
内容标识创建时间名称类别用户标识1 2 3 4 5 6 7 8 9 10
20120902
中国好声音1号
品种;演出
一个
20120904
中国好声音2号
品种;演出
一个
20120906
中国好声音外卡大赛
品种;演出
一个
20120908
中国好声音第三期
品种;演出
一个
20120910
中国好声音4号
品种;演出
一个
20120912
中国语音玩家访谈
综艺花絮
2
20120914
中国好声音5号
品种;演出
一个
20120916
中国好声音录制花絮
综艺花絮
2
20120918
《Theway》独家专访
什一税
三
20120920
加多宝凉茶广告
综艺广告
四
这里的用户标识应该对应于另一个用户表,暂时不会列出。我们只需要知道UserID的含义:
1代表浙江卫视;2 .代表好声音的船员;3代表XX微博;4代表提案国。
在调用查询界面(20120901、20121001、‘中国之声’、‘综艺’、‘浙江卫视’)时,同时将以上五个条件输入find。
这个时候,我们应该拿到记录。应该有第1、2、3、4、5和7条。第六条不属于浙江卫视,不宜选。
我们在设计RowKey时可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。
请注意以下几点:
1.每个记录的RowKey,每个字段都需要填充到相同的长度。预计如果我们有多达100,000个用户,用户标识应该统一填充到6位数,例如000001,000002。
2.在末尾添加全局唯一的FileID的目的是使每个文件对应的记录全局唯一。当用户标识与创建时间相同时,避免重叠两个不同的文件记录。
根据此RowKey,存储了上述文件记录,并且在HBase表中找到了以下结构:
rowKey(用户标识6乘以8文件标识6)名称类别.
00000120120902000001
00000120120904000002
00000120120906000003
00000120120908000004
00000120120910000005
00000120120914000007
00000220120912000006
00000220120916000008
00000320120918000009
00000420120920000010
怎样用这张表
创建扫描对象后,我们设置开始行(00000120120901)和结束行(0000120120914)。
这样,扫描时只扫描userID=1的数据,时间范围限定在这个指定的时间段,满足了按用户以及按时间范围对结果的筛选.而且因为记录是集中存储的,所以性能非常好。
然后使用SingleColumnValueFilter(http://www . Sina.com/)总共四个,分别约束名称和类别的上限和下限。org.apache.hadoop.hbase.filter.SingleColumnValueFilter
满足按同时按文件名以及分类名的前缀匹配。
(注意:使用SingleColumnValueFilter会影响查询性能,在真正处理海量数据时会消耗很大的资源,且需要较长的时间。
如果需要分页,可以添加另一个页面过滤器来限制返回记录的数量。
以上,我们完成了支持多条件查询的高性能HBase表结构的设计。
在后续的博文中我将多举几种应用场景下rowKey的,可以满足简单条件下海量数据瞬时返回的查询功能)
myBlog:http://blog.csdn.net/pirateleo/
文章:http://blog.csdn.net/lzm1340458776/article/details/44941953
转载:
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154982.html