首页 > 其他分享 >HBase的rowkey设计

HBase的rowkey设计

时间:2023-03-28 15:01:42浏览次数:34  
标签:scan UserID 记录 综艺 查询 RowKey rowkey 设计 HBase


HBase的查询实现只提供两种方式:

1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get

2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan

 

实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:

1、scan可以通过setCaching与setBatch方法提高速度(以空间换时间);

2、scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。

通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。

3、scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

 

下面举个形象的例子:

我们在表中存储的是文件信息,每个文件有5个属性:文件id(long,全局唯一)、创建时间(long)、文件名(String)、分类名(String)、所有者(User)。

我们可以输入的查询条件:文件创建时间区间(比如从20120901到20120914期间创建的文件),文件名(“中国好声音”),分类(“综艺”),所有者(“浙江卫视”)。

假设当前我们一共有如下文件:

 

内容列表 ID CreateTime Name Category UserID 1 2 3 4 5 6 7 8 9 10

20120902

中国好声音第1期

综艺

1

20120904

中国好声音第2期

综艺

1

20120906

中国好声音外卡赛

综艺

1

20120908

中国好声音第3期

综艺

1

20120910

中国好声音第4期

综艺

1

20120912

中国好声音选手采访

综艺花絮

2

20120914

中国好声音第5期

综艺

1

20120916

中国好声音录制花絮

综艺花絮

2

20120918

张玮独家专访

花絮

3

20120920

加多宝凉茶广告

综艺广告

4

 

 

 

这里UserID应该对应另一张User表,暂不列出。我们只需知道UserID的含义:

1代表 浙江卫视; 2代表 好声音剧组; 3代表 XX微博; 4代表 赞助商。
调用查询接口的时候将上述5个条件同时输入find(20120901,20121001,"中国好声音","综艺","浙江卫视")。

此时我们应该得到记录应该有第1、2、3、4、5、7条。第6条由于不属于“浙江卫视”应该不被选中。

我们在设计RowKey时可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。

需要注意以下几点:

1、每条记录的RowKey,每个字段都需要填充到相同长度。假如预期我们最多有10万量级的用户,则userID应该统一填充至6位,如000001,000002...

2、结尾添加全局唯一的FileID的用意也是使每个文件对应的记录全局唯一。避免当UserID与CreateTime相同时的两个不同文件记录相互覆盖。

按照这种RowKey存储上述文件记录,在HBase表中是下面的结构:

rowKey(userID 6 + time 8 + fileID 6)     name    category ....

00000120120902000001

00000120120904000002

00000120120906000003

00000120120908000004

00000120120910000005

00000120120914000007

00000220120912000006

00000220120916000008

00000320120918000009

00000420120920000010

怎样用这张表?

在建立一个scan对象后,我们setStartRow(00000120120901),setEndRow(00000120120914)。

这样,scan时只扫描userID=1的数据,且时间范围限定在这个指定的时间段内,满足了按用户以及按时间范围对结果的筛选。并且由于记录集中存储,性能很好。

然后使用SingleColumnValueFilter(org.apache.hadoop.hbase.filter.SingleColumnValueFilter),共4个,分别约束name的上下限,与category的上下限。满足按同时按文件名以及分类名的前缀匹配。

(注意:使用SingleColumnValueFilter会影响查询性能,在真正处理海量数据时会消耗很大的资源,且需要较长的时间。

在后续的博文中我将多举几种应用场景下rowKey的,可以满足简单条件下海量数据瞬时返回的查询功能)

如果需要分页还可以再加一个PageFilter限制返回记录的个数。

以上,我们完成了高性能的支持多条件查询的HBase表结构设计。


标签:scan,UserID,记录,综艺,查询,RowKey,rowkey,设计,HBase
From: https://blog.51cto.com/u_2650279/6154914

相关文章

  • Google Bard初步评测:与ChatGPT的性能、设计和功能对比分析
    谷歌Bard,搜索巨头对ChatGPT的回应,终于来了。但这值得等待吗?它与网络上涌现的许多其他人工智能聊天机器人相比如何嗯,第一个很容易回答。根据我们的初步印象,谷歌决定在它......
  • Couchbase Server 2.0.1企业版发布
    CouchbaseServer2.0.1企业版发布作者:chszs最近两天,CouchbaseServer2.0.1企业版发布了。正如大家预料的那样,2.0.1版是2.0版的维护版,它并没有增加很多新特征,而主要集中于......
  • 常用设计模式
    1、设计模式简介什么是模式?有一些问题及其解决方案不断变换面孔重复出现,在这些不同的面孔后面是共同的本质;这些共同的本质就是模式。设计模式是特定开发场景下针对特定......
  • 网站首页的设计(转)
    网站首页的设计是一件非常让人头痛的事。虽然她看上去很简单:产品经路随便从网站里拿点东西出来,堆出一个看上去靠谱的页面。也正因此,它往往非常麻烦:很多人都可以发表自己的见......
  • 面向对象设计原则
    1、简介常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。SRP:就一个类而言,应该只有一个引起它变化的原因,也就是一个类只有一个职责,这个......
  • 数据密集型应用存储与检索设计
    本文内容来自《数据密集型应用系统设计》(大名鼎鼎的DDIA)。 高分好书什么是「数据密集型应用系统」?当数据(数据量、数据复杂度、数据变化速度)是一个应用的主要挑战,......
  • CouchDB与CouchBase的比较
    《CouchDB与CouchBase的比较》作者:chszs,转载需注明。一、概述ApacheCouchDB和CouchBase两个NoSQL数据库,都是开源、免费的NoSQL文档型数据库,都使用了JSON作为其文档格式。Ap......
  • 章五 软件体系结构集成开发环境的设计与实现
    章五软件体系结构集成开发环境的设计与实现一、软件体系结构描述语言1、目前出现了许多针对特定领域的软件体系结构描述语言,有:Aesop、ArTek、C2、Darwin、LILEANNA、MetaH......
  • 章七 设计模式
    章七设计模式一、设计模式的分类1、共包含23个设计模式1)AbstractFactory提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2)Adapter将一个类的接口转......
  • 使用HBase EndPoint(coprocessor)进行计算
    如果要统对hbase中的数据,进行某种统计,比如统计某个字段最大值,统计满足某种条件的记录数,统计各种记录特点,并按照记录特点分类(类似于sql的groupby)~常规的做法就是把hbase中整......