hbase学习 rowKey的设计-4

技术hbase学习 rowKey的设计-4 hbase学习 rowKey的设计-4hbase学习 rowKey的设计-4访问hbase table中的行,只有三种方式:
1 通过单个row key访问

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

(0)

相关推荐

  • jQuery如何改变input的属性

    技术jQuery如何改变input的属性本篇内容介绍了“jQuery如何改变input的属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年11月16日
  • 利用聚合概念指导MongoDB的Schema设计是怎么样的

    技术利用聚合概念指导MongoDB的Schema设计是怎么样的这期内容当中小编将会给大家带来有关利用聚合概念指导MongoDB的Schema设计是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大

    攻略 2021年11月4日
  • SQL32 将employees表的所有员工的lastname和firstname拼接起来作为Name

    技术SQL32 将employees表的所有员工的lastname和firstname拼接起来作为Name SQL32 将employees表的所有员工的last_name和first_name拼接起来

    礼包 2021年10月28日
  • 如何增加上一个和下一个按钮实现遍历分析?

    技术如何进行增加prev,next按钮实现问题的遍历分析如何进行增加prev,next按钮实现问题的遍历分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

    攻略 2021年12月18日
  • 公顷怎么读,公里公顷公亩的背读方式

    技术公顷怎么读,公里公顷公亩的背读方式1.面积单位 面积单位有平方公里公顷怎么读、平方米、平方分米、平方厘米、平方毫米等。它们之间的换算关系是: 1平方公里=1000000平方米; 1平方米=100平方分米;

    生活 2021年10月27日
  • python光学仿真面向对象光学元件类的实现是什么

    技术python光学仿真面向对象光学元件类的实现是什么python光学仿真面向对象光学元件类的实现是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能

    攻略 2021年10月20日