Home  >  Article  >  Database  >  hbase rowkey 设计(三维有序)

hbase rowkey 设计(三维有序)

WBOY
WBOYOriginal
2016-06-07 16:29:251113browse

此文原创,转载请说明出处:http://ronxin999.blog.163.com/blog/static/4221792020130109202973/ 看这篇文章,你首先要了解hbase的基本存储模型,不懂的可以看我的文章,有做特别的说明。 今天难得有时间,写博文,特地总结下一直想写hbase的实践经验,在用


此文原创,转载请说明出处:http://ronxin999.blog.163.com/blog/static/4221792020130109202973/

看这篇文章,你首先要了解hbase的基本存储模型,不懂的可以看我的文章,有做特别的说明。
今天难得有时间,写博文,特地总结下一直想写hbase的实践经验,在用hbase的过程中,我们都知道,rowkey设计的好坏,是我们能最大发挥hbase的架构优势,也是我们是否正确理解hbase的一个关键点。闲话少说,进入正题。

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。

先 说rowkey,我们知道rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。我们知道,rowkey是以字典顺序排序的。而存储的字节码,字典排序,我们知道,如果是字 母,那就是字母的顺序,比如,有两个rowkey,rowkey1:aaa222,rowkey2:bbb111,那么rowkey1是排在 rowkey2前面的,因为按字典,a排在b前面,如果rowkey2的第一位也是a,那么就根据第二位来比较,如果还相同,则比较第三为,后面同样。这 个理解了,我们在根据rowkey范围查询的时候,我们一般是知道startRowkey,如果我们通过scan只传startRowKey : d开头的,那么查询的是所有比d大的都查了,而我们只需要d开头的数据,那就要通过endRowKey来限制。我们可以通过设定endRowKey为:d 开头,后面的根据你的rowkey组合来设定,一般是加比startKey大一位。比如说rowkey设计为:用户ID-日期,那么查某个用户某天的数 据,startKEY为3231-20121212,endKey为:3231+201213,那么你查到的就是用户为3231在20121212这一天 的数据。

column key

column key是第二维,数据按rowkey字典排序后,如果rowkey相同,则是根据column key来排序的,也是按字典排序。
我们在设计table的时候要学会利用这一点。比如我们的收件箱。我们有时候需要按主题排序,那我们就可以把主题这设置为我们的column key,即设计为columnFamily+主题.,这样的设计。

timestamp

timestamp 时间戳,是第三维,这是个按降序排序的,即最新的数据排在最前面。这个就没有什么说的了。网上其他的博客也提到比较多。

这篇文章主要是帮助朋友们理解rowkey的字典排序即(三维有序)。希望对你有帮助。

hbase rowkey 设计(三维有序)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn