开发者学堂课程【HBase 入门教程:HBase 表设计_4】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/397/detail/5084
HBase 表设计_4
内容介绍
一、组织架构
二、例子
一、组织架构
组织架构 部门-子部门
查询 顶级部门
查询 每个部门的所有子部门
部门 添加、删除子部门
部门 添加、删除
二、例子
1.dept 表
rowkey dept 列簇 dept-cid 列簇
0|1_did dept:name 名称 cid 代表子 id name 为子 id 名称
dept:pid 父 id dept-cid:cid1=name1
dept-cid:cid2=name2
dept-cid:cid3=name3
以部门 id 为 rowkey ,两个列族,这个部门的基本信息,第二个列族,cid 表示部门 id,name 表示部门名称。查询每个部门的子部门,首先第二个列族下边的所有列查询出来,查询顶级部门,如果在第一个列族下边 pid 是为空,它是顶级部门,如果每次要查询,把所有数据全进行变例,查到 pid 为空的,添加一个值的过滤,判断这个 pid 值是空值,过滤器在跑的时候,每一项进行一个筛选,最终查到这个顶级部分,但是这个效率是有点问题,在 rowkey 部门里加,用0、1标记顶级部门和非顶级部门。
0代表 顶级部门
1代表 非顶级部门
rowkey:按照顺序排序,查询效率更高
did_0|1
0 | 1_did
所有顶级部门的前面一部分连续的数据,要查询,只要找到这一条,后边连续的数据,所有顶级部门一次性就查完了。如果放在后面,就需要把所有数据进行变例,可能这个部门 id 排在最后,但他是不是顶级部门,效率就低。在设计 HBase 表的时候,常用的业务,主要的业务,要查询的东西,可以设计到 rowkey 里,通过直接进行 rowkey 和对值进行过滤,设计到 rowkey 效率比较高。
2.一个表
rowkey ---------部门名 不是特别好
cf1:子部门1
子部门2
子部门3
组织架构
Dept_no 部门编号
Dept_name 部门名称
Dept_pno 上级部门编号
列族1 列族2
rowkey cf1: name cf2: pid
部门 id 部门名称 父部门 id
部门 id 作为列族,是需要修改的。父部门没有体现子部门,
rowkey CF1 CF2 CF3
org_id org_info:name c_org_id1=level p_org_id=level
org_info:level c_org_id2=level
写了三个列族。Rowkey 需要改,第一个列族存放部门信息等等,第二个列族存放的子部门,第三个存放的是父部门,也没有体现优先级。不管在 CF2 还是 CF3 存放的都是部门的 id 作为 k ,level 是一个等级,修改一个下边所有等级都会发生变化,查询顶级部门的时候,也需要对 level 这个值进行过滤,效果也不是很好。
department 表
rowkey |
CF1 |
CF2 |
|
department_ info |
sub_ department |
department_ id |
department info : name |
sub_ department:t1= department_ sub_ id1 su2_ department:t2= department_ sub_ id2
|
Department_sub 表
rowkey |
CF1 |
CF2 |
|
Department_sub_info |
department |
Department_sub_id |
Department_sub_info:name |
Department:t1=department_id1 |
这种设计就变得很理想,任何部门都存在子部门,第一张表里有数据,子部门里也有,也不是很理想。