Hbase之表的设计
来源:互联网 发布:淘宝网店转让合法吗 编辑:程序博客网 时间:2024/05/22 14:28
最近,由于项目的需要开始接触Hbase,发现如果想要很好的利用Hbase存储和维护利用自己的海量数据,表的设计至关重要,一个好的表结构可以从本质上提高操作速度,直接决定了用户的get、put、delete等各种操作的效率。下面我就先介绍一下Hbase的基本表的构成。
Hbase的表是Key-Value的形式,这种结构很好的支持了查找等操作,表是由一个Row_key和一个个的列簇组成,列簇中又可以划分出很多列。其中Row_key就相当于每一行数据的主键,唯一指定一行的数据,主要形式如下图所示:
Column Family:Person
Photo
Row_key
name
sex
age
xxxxxxxxxxxxxxx
二进制字符串
0001
LiMing
female
24
xxxx@xxx.com
表的key-value的形式就像Json格式的数据一样,其中王表中存储的数据任何格式都是可以得,因为他都会以二进制byte[ ]数组的形式来存储。表虽然是这样一个结构,但是,不同的业务表的设计模式是千差万别,下面我会用一个我看到的论文中例子来说明表设计重要性。
场景:我们拿Twitter关系来举例子,也就是用户和用户之间的关系,比如,谁关注了谁等等,我们的需求有三个:
1、查询某位用户的所有关注的人 2、查询被某位用户关注的所有的人 3、添加新关注的用户
假设我们将表设计成如下的形式:(row_key为用户id,列簇为他所关注的用户id)
用户
Column Family:关注
a
1 : b
2 : c
3 : d
b
1 : c
c
1:b
2 : f
用户
Column Family:关注
a
1:b
2:c
3:d
Count:3
b
1:c
Count:1
c
1:b
2:f
Count:2
这样,假设用户e新关注了用户b,那么我在插入的时候,就只需先查看count值,然后将其加1后,作为新的用户的key插入,即在row_key为b的那一行插入2:e。但是很明显这样设计表,并不能满足需求2,即当我要查询被用户a关注的所有的用户,这样我就不得不需要就表中所有信息查询一遍,才能得到结果,这样,效率明显是很低的。所以我们对表进行如下改进:
Row_key (用户id+被关注的用户id)
Column(被关注用户的信息)
a+b
b的详细信息
a+c
c的详细信息
a+d
d的详细信息
b+c
c的详细信息
我们将row_key设置成用户id+被关注的用户id,这样我们在查找被用户a关注的用户的时候,只需要匹配row_key的前半部分,而查找关注用户a的所有用户的时候,我们就可以匹配row_key的后半部分即可完成我们的需求。
注:Hbase还在学习中,如有写的不对的地方,还请大神纠正,谢谢
- Hbase之表的设计
- HBase之表的设计原则
- hbase表的设计
- Hbase -- 表的设计
- Hbase表的设计
- hbase表的设计
- Database之HBase表设计
- HBase学习之五:HBase的RowKey设计原则
- HBase学习之六: hbase的预分区设计
- HBase学习之六: hbase的预分区设计
- HBase学习之HBase的RowKey设计原则
- HBase学习之五:HBase的RowKey设计原则
- hbase的rowkey设计之字典顺序
- 说说我的HBase表设计
- HBase表设计的经验分享
- HBase的rowkey设计
- HBase的设计优化
- HBase的rowkey设计
- 读王垠博文有感
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- MVC下拉控件绑定数据
- 子进程的异步等待方式
- 内核启动分析
- Hbase之表的设计
- iOS学习笔记-078.核心动画04——CATransition(转场动画)
- mongoDB-pymongo-入门
- C++primer-1
- 值得收藏的50个学习C语言的源代码网站
- html学习
- Dockerfile中的Shell风格与JSON风格对比及SHELL指令详解
- java字符串操作:匹配、替换、萃取、分割拆分
- MySQL插入数据时中文乱码问题