hbase的RowKey设计

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值