分享

关于hbase二级索引的理解,请指导。

Wyy_Ck 发表于 2017-1-9 16:52:45 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 13 27357
1、产生背景
为了方便组合查询,类似select 关系型数据库
2、如何产生
在存储hbase数据时候,通过调用hbase底层接口,创建索引表和表数据
3、如何做
RS起始rowkey+索引名+索引值+rowkey
4、个人理解
场景:
知道某一列的值,不知道rowkey,如何查询呢? 可以使用上述构建索引方式,通过已知的value,查询出该行的rowkey,然后通过rowkey查询出对应列的值。
问题是:这个索引值是代码可以写的吗  是已知的吗? 如不是,如何得到这个RS起始rowkey、索引名和索引值?


刚接触这个二级索引不久,请多多指导。

已有(13)人评论

跳转到指定楼层
Wyy_Ck 发表于 2017-1-9 16:58:28
回复

使用道具 举报

arsenduan 发表于 2017-1-9 17:30:01
1、产生背景
为了方便组合查询,类似select 关系型数据库这个还都不到关系数据库sql,即使有二级索引,限制也是非常大的
2、如何产生
在存储hbase数据时候,通过调用hbase底层接口,创建索引表和表数据
赞同理解,不过需要明白索引表和主表的关系
3、如何做
RS起始rowkey+索引名+索引值+rowkey
如何做这里没看明白,二级索引是为了弥补一些列值快速查询
4、个人理解
场景:
知道某一列的值,不知道rowkey,如何查询呢? 可以使用上述构建索引方式,通过已知的value,查询出该行的rowkey,然后通过rowkey查询出对应列的值。
正因为不知道rowkey,所以要到索引表中去去查找
问题是:这个索引值是代码可以写的吗  是已知的吗? 如不是,如何得到这个RS起始rowkey、索引名和索引值?

楼主可能缺乏实际项目经验。这个查询的值,是我们已知的。比如我们想查询店铺中有没某个商品,这个值是你输入的
回复

使用道具 举报

arsenduan 发表于 2017-1-9 17:30:32
推荐
hbase如何创建二级索引以及创建二级索引实例
http://www.aboutyun.com/forum.php?mod=viewthread&tid=8857

让你明白hbase二级索引核心思想
http://www.aboutyun.com/forum.php?mod=viewthread&tid=8819




回复

使用道具 举报

credit 发表于 2017-1-9 17:35:40
可以考虑elasticsearch或者solr
回复

使用道具 举报

Wyy_Ck 发表于 2017-1-10 09:41:43
arsenduan 发表于 2017-1-9 17:30
1、产生背景
为了方便组合查询,类似select 关系型数据库这个还都不到关系数据库sql,即使有二级索引,限 ...

非常感谢详细的答复。的确是缺乏项目经验,目前也是自学阶段,理解很多还不到位。
还有一些疑问:
1、索引表中除了rowkwy之外,其他的都是已知的。
楼主可能缺乏实际项目经验。这个查询的值,是我们已知的。比如我们想查询店铺中有没某个商品,这个值是你输入的。
这个输入的应该是索引表索引值吧,索引值和索引名啥区别?  


没有项目经验如何学呢?  担心理解出错啊




谢谢
回复

使用道具 举报

Wyy_Ck 发表于 2017-1-10 09:42:32
credit 发表于 2017-1-9 17:35
可以考虑elasticsearch或者solr

OK。 研究下

谢谢啊
回复

使用道具 举报

credit 发表于 2017-1-10 10:08:12
Wyy_Ck 发表于 2017-1-10 09:42
OK。 研究下

谢谢啊

不客气,只使用过solr,不过感觉elasticsearch的应用更多,使用solr如果有问题可以交流下

回复

使用道具 举报

tntzbzc 发表于 2017-1-10 10:57:25
Wyy_Ck 发表于 2017-1-10 09:41
非常感谢详细的答复。的确是缺乏项目经验,目前也是自学阶段,理解很多还不到位。
还有一些疑问:
1、 ...

这个输入的应该是索引表索引值吧,索引值和索引名啥区别?  
二者是一回事。其实这个很复杂的,需要楼主消化一段时间。多找资料,多打基础。回头再来看,就会明了多了。
先弄明白主表和索引表
hbase.jpg


主表其实就是我们的信息表。比如学生表
学生号,姓名,年龄,班级

在hbase中,学生号可以作为rowkey.
学生信息,可以作为列簇,而列簇里面包含三个列,分别为
姓名,年龄,班级
但是我不止想通过学号,在查询学生,我还想通过姓名来查学生。
所以我们就要建立二级索引表,将学生号和学生姓名另外建表。
为何另外建表??
如果不明白,这里说明,还是处于混沌状态。
是因为hbase只有rowkey查询是速度是非常快的。其它查询是非常慢的。所以我们要另外建表。通过在索引表中,通过我们想查询的姓名【输入姓名】,快速的定位rowkey【学生号】,然后根据学生号【rowkey】快速的定位学生信息【比如学生号,姓名,年龄,班级】。
我们这样做的目的是什么?
为啥搞这么麻烦,就是为了效率,提升查询速度。










回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条