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)

相关推荐

  • Oracle DBA常用脚本中转换执行shell脚本是怎样的

    技术Oracle DBA常用脚本中转换执行shell脚本是怎样的今天就跟大家聊聊有关Oracle DBA常用脚本中转换执行shell脚本是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大

    攻略 2021年11月29日
  • Bootstrap-table 账号维护

    技术Bootstrap-table 账号维护 Bootstrap-table 账号维护https://www.cnblogs.com/laowangc/p/8875526.html
    https://ww

    礼包 2021年11月11日
  • Python解释器种类以及特点是什么

    技术Python解释器种类以及特点是什么这篇文章将为大家详细讲解有关Python解释器种类以及特点是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python解释器是

    攻略 2021年12月4日
  • 如何使用GAN拯救你的低分辨率老照片

    技术如何使用GAN拯救你的低分辨率老照片如何使用GAN拯救你的低分辨率老照片,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1 项目背景了解GAN的

    攻略 2021年10月27日
  • Win10系统下如何将VSCode配置到右键菜单中

    技术Win10系统下如何将VSCode配置到右键菜单中这篇文章将为大家详细讲解有关Win10系统下如何将VSCode配置到右键菜单中,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。教程新

    攻略 2021年11月12日
  • C#与C++哪个更强

    技术C#与C++哪个更强这篇文章主要介绍“C#与C++哪个更强”,在日常操作中,相信很多人在C#与C++哪个更强问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#与C++哪个更强”的疑惑有

    攻略 2021年11月29日