概述
hbase的RowKey设计
HBASE的存在是解决了mysql的两个瓶颈问题
1.mysql的并发问题
2.数据量特别大的问题(最少要是千万条的数据)几百万的数据完全可以存储mysql中.
HBASE可以存储的数据
1.手机信息
2.电影信息的存储
3.用户标签信息的存储
4.车辆信息的存储
5.图片数据
6.视频数据
HBASE的RowKey设计
要考虑的问题:
我的数据究竟是读得多还是写的多还是修改的多,
查询维度,
并发的问题,
固定长度,不要太长.
实例分析
1.手机信息
178_1252_4783 1-3位是网络识别,4-7是地区编码(归属地),8-11用户号码(个人编码)
(1)如果我们自己查询我们可以切分成"1252_4178_783"样子这样归属地一直的就会在一起,查询速度超级快,
2.电影信息的存储
{"movie":"1192","rate":"5","timeStamp":"978300760","uid":"1"}有1亿条类似的数据需要存在HBASE
考虑
既要满足快速按照电影查询数据,
又要满足快速按照用户查询数据
分析
数据不用考虑数据并发的问题,可以存在同一个region(区域)
创建一个二级索引
设置协处理器 ==>拦截器 建立一个客户端
首先按照 movie_time_uid设计RowKey然后再设计反向表,然后设计二级索引
在插入电影数据的时候,当遇到uid的时候,将uid写到rk写到索引表中去,
协处理器
相当于一个拦截器,具体到每个region都会执行,
Endpoint(终端)扩展集群的能力,是的客户端开方新的运算命令
Observers(观察者)允许集群在正常的集群操作的过称中,可以有不同的行为表现.
协处理器的加载方式有两种,静态加载,动态加载,
静态加载:
hbase.coprocessor.user.region.classes
org.apache.hadoop.hbase.coprocessor.AggregateImplementation
动态加载:
启用表 aggregation,只对特定的表生效。通过 HBase Shell 来实现。
disable 指定表。 hbase> disable ‘mytable’
添加 aggregation
hbase> alter ‘mytable’, METHOD => ‘table_att’,‘coprocessor’=>
‘|org.apache.Hadoop.hbase.coprocessor.AggregateImplementation||’
重启指定表 hbase> enable ‘mytable’
二级索引案例大概步骤
1.打一个Coprocessor(协处理器)内涵Endprint,Observer的jar包,
2.将jar包上传至hdfs
3.在HBASE shell 客户端执行4行命令:
(1).创建表A
(2).创建表A的反向表B
(3).禁用反向表B
(4).alter “B”,METHOD => “table_att”,“coprocessor”=>“协处理器jar包路径|协处理器全类名|协处理器加载顺序|参数”
4.检验二级索引是否建成
hbase(main):036>scan "A"
Row
column+cell
b
column=f1:from,timestamp=1485458854863,value=a
hbase(main):036>scan "B"
Row
column+cell
a
column=f1:from,timestamp=1485458854863,value=b
详情请关注网址
https://www.cnblogs.com/liuwei6/p/6837674.html
最后
以上就是欣慰手套为你收集整理的hbase的RowKey设计的全部内容,希望文章能够帮你解决hbase的RowKey设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复