hbase rowkey设计,以三个事例讲解

摘要:
其中提到,hbase通常无法避免rowkey的设计。Rowkey设计的质量直接影响读/写性能。接下来,小卡用三个例子解释了第一个。hbase设计表支持以下要求:查询顶级部门、查询每个部门的所有子部门、添加部门、删除子部门、增加和删除数据。例如,上图中的解决方案是:一个表,一列族记录部门信息,一列列族记录子部门信息。折旧键cf1cf2

提到hbase一般无法避开rowkey的设计。Rowkey设计的优劣直接影响读写性能。

下面小咔以三个实例来讲解

一。事例一权限控制人员角色表

权限分配时,普遍关系型数据库,一般会设计三张表,一张用户表记录用户信息;一张角色表记录角色信息;还有张用户角色表,建立用户与角色的对应关系。

那么hbase如何设计表结构

要实现以下功能:

人员有多个角色 角色优先级

角色有多个人员

人员 删除添加角色

角色 可以添加删除人员

人员 角色 删除添加

数据举例:

小明 拥有 劳动委员>体育委员

小红 拥有 学习委员>劳动委员>体育委员

解决思路:

设计2张表,一个记录个人信息,一个记录角色信息,他们之前的关系通过列族2进行记录

psn cf1(个人信息) cf2(拥有的角色)
rowkey(pid) cf1:name=…;cf2:age=… cf2:100/200/300=…
001 cf1:name=小明;cf2:age=… cf2:200=10;cf2: 100=9
002 cf1:name=小红;cf2:age=… cf2:300=10;cf2: 200=9;cf2: 100=8

role cf1(角色信息) cf2(拥有的人员)
rowkey(rid) cf1:name=… cf2:001/002/003=…
100 cf1:name=体育委员 cf2:001=小明;cf:002=小红
200 cf1:name=劳动委员 cf2:001=小明;cf:002=小红
300 cf1:name=学习委员 cf:002=小红

二。事例二组织架构设计

公司都有组织架构

hbase rowkey设计,以三个事例讲解第1张

如上图ceo下面有开发部,测试部,财务部三个部门;开发部下又有3个部门。

hbase设计表,实现以下需求

查询 顶级部门

查询 每个部门的所有子部门

部门 添加,删除子部门

部门 添加删除

数据举例:

上图

解决思路:

一张表,一个列族记录部门信息,一个列族记录子部门信息

Dep
rowkey cf1(部门信息) cf2(子部门)
did cf1:name=…; cf2:002=..;cf2:003=…
001 cf1:name=CEO;cf1:up=0 cf2:002=开发部;cf2:003=测试;cf2:004=财务部
002 cf1:name=开发部;cf1:up=1 cf2:005=开发1;cf2:006=开发2;cf2:007=大数据部
005 cf1:name=开发1;cf1:up=1
006 cf1:name=开发2;cf1:up=1
007 cf1:name=大数据部;cf1:up=1
003 cf1:name=测试部;cf1:up=1 cf2:008=测试1
008 cf1:name=测试1 ;cf1:up=1
004 cf1:name=财务部;cf1:up=1

三。事例三微博关注设计

微博大家都使用过,大多数人都关注的自己心中的他、她。如下需求:

添加、查看关注

粉丝列表

写微博

查看首页,所有关注过的好友发布的最新微博

查看某个用户发布的所有微博

数据举例:

小明001 关注小红,小绿
小红002
小黑003 关系小红
小绿 004

解决思路:

粉丝表,记录关注人与粉丝人。 列族1记录关注列表,列族2记录粉丝列表

微博表,记录所发的微博

微博收取表,按时间顺序记录发帖微博,用于查看最新微博

粉丝表
rowkey cf1(关注列表) cf2(粉丝列表)
pid cf1:001=… cf2:001=…
001 cf1:002=小红;cf1:004=小绿
002 cf2:001=小明;cf2:003=小黑
003 cf1:002=小红
004

微博表
rowkey cf1
wid(pid_max-timestamp)
002_123456 cf1:name=大数据
002_745634 cf1:name=大数据

微博收取表
rowkey cf1
pid wid
002 002_745634
001 002_123456

hbase设计的表有个缺点,大量的数据冗余。优点是单表查询数据快。rowkey设计合理查询速度就快,设计不合理还不如关系型数据库

免责声明:文章转载自《hbase rowkey设计,以三个事例讲解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nodejs body-parser 解析post数据通过jpa getResultList 获取查询到的内容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ubuntu下解决无声音的方法

问题的根本原因是用户失去了访问音频设备的权利。例如,在我的系统下,输出总计0drwxr-xr-x2rootroot1802008-05-1408:53.drwxr-xr-x12rootroot45802008-05-1513:01..crw rw----+1rootroot11682008-05-1408:53控制C0crw rw----+1 rootroo...

Sql Server:创建用户并指定该用户只能看指定的视图,除此之外的都不让查看

--当前数据库创建角色execsp_Addrole“seeview”--创建了一个数据库角色,--添加了只允许访问指定视图的用户:execsp_Addlogin“login”、“password”、“default database name”execsp_ Addlogin“per”、“oa”不能在此处执行,execsp_Adduser“login nam...

Dto和Entity如何优雅的相互转换

什么是Dto,Entity,用来干什么?这个时候就有一个麻烦事,Entity和Dto的互转。通常的转换方法有两个途径,一个是通过反射的方式,来进行对象属性的复制;另一种是,通过硬编码进行对象属性的赋值;1.在service层中添加实体类转换函数@ServicepublicMyEntityService{publicSomeDtogetEntityById{S...

WinForm 中 comboBox控件之数据绑定

作为列表类型,public class Info{public string Id{get;Name=“Li Si”};infoList.Add(info3);...

windows下vue项目启动步骤

辗转反侧之后,我终于开始了构建的vue项目。我记下了备份步骤。它只适用于那些没有启动前端项目经验的人,可能对其他人没有参考价值:OS:windows7gitclone已经为构建的vue项目安装了Nodejs。6.10以上的最新版本似乎能够自动配置路径和npm。无论如何,安装后,我可以使用cmd在任何路径下查询“node version”或“npm-v”以提供...

uni.showModal,uni.showToast使用

uni.showModal({title:'提示',content:'您已参加并通过本次考试,是否再次进行考试?...