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)

相关推荐

  • activity与task启动方式(tasker调用activity)

    技术怎么以singleTask的方式来启动SubActivity本篇内容主要讲解“怎么以singleTask的方式来启动SubActivity”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编

    攻略 2021年12月18日
  • 抖音刷粉咋弄,抖音刷粉怎么操作

    技术抖音刷粉咋弄,抖音刷粉怎么操作抖音的玩法如此之多,其中最常见的一段视频的镜头切换是如何做的呢?点击进入抖音后点击“我”,然后再点击“作品”即可看到,目前,抖音内部只能查看自己的视频播放量,也只能在自己主页上的作品栏上

    测评 2021年10月19日
  • php中for有什么作用

    技术php中for有什么作用这篇文章主要讲解了“php中for有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中for有什么作用”吧!

    2021年11月9日
  • 数据库中Oracle DB2随取几行的示例分析

    技术数据库中Oracle DB2随取几行的示例分析小编给大家分享一下数据库中Oracle DB2随取几行的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们

    攻略 2021年11月20日
  • c++编译器(c++用什么软件编程)

    技术将C++ 类型属性暴露给QML的示例分析这期内容当中小编将会给大家带来有关将C++ 类型属性暴露给QML的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、数据类型处理和所

    攻略 2021年12月15日
  • python和sqlite3数据库如何实现简单登陆注册功能

    技术python和sqlite3数据库如何实现简单登陆注册功能这篇文章将为大家详细讲解有关python和sqlite3数据库如何实现简单登陆注册功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

    攻略 2021年12月4日