Changes between Version 2 and Version 3 of hbase_table_design


Ignore:
Timestamp:
09/13/2012 03:20:13 PM (14 years ago)
Author:
liaojiaohe
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • hbase_table_design

    v2 v3  
    11      1、表的属性[[BR]] 
    22 
    3       (1)最大版本数:通常是3,如果对于更新比较频繁的应用完全可以设置为1,能够快速的淘汰无用数据,对于节省存储空间和提高查询速度有效果。不过这类需求在海量数据领域比较小众。[[BR]] 
     3      (1)最大版本数:通常是3,如果对于更新比较频繁的应用完全可以设置为1,能够快速的淘汰无用数据,对于节省存储空间和提高查询速度有效果。[[BR]] 
    44 
    5       (2)压缩算法:可以尝试一下最新出炉的snappy算法,相对lzo来说,压缩率接近,压缩效率稍高,解压效率高很多。[[BR]] 
     5      (2)压缩算法:尝试使用snappy算法,相对lzo来说,压缩率接近,压缩效率稍高,解压效率高很多,而且安装相对方便[[BR]] 
    66 
    7       (3)inmemory:表在内存中存放,一直会被忽略的属性。如果完全将数据存放在内存中,那么hbase和现在流行的内存数据库memorycached和redis性能差距有多少,尚待实测。[[BR]] 
     7      (3)inmemory:表在内存中存放,同时磁盘上也会存放,可以提高访问速度,可以设置到某个CF,HBASE并不保证数据都在内存。[[BR]] 
    88 
    9       (4)bloomfilter:根据应用来定,看需要精确到rowkey还是column。不过这里需要理解一下原理,bloomfilter的作用是对一个region下查找记录所在的hfile有用。即如果一个region下的hfile数量很多,bloomfilter的作用越明显。适合那种compaction赶不上flush速度的应用。[[BR]] 
     9      (4)[http://blog.csdn.net/jiaomeng/article/details/1495500 bloomfilter]:开启可以提升Get和exist的速度,根据应用来定,看需要精确到rowkey还是column。不过这里需要理解一下原理,bloomfilter的作用是对一个region下查找记录所在的hfile有用。即如果一个region下的hfile数量很多,bloomfilter的作用越明显。适合那种compaction赶不上flush速度的应用,单这种应用在我们这里比较少见。如果你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护。所以,开启bloomfilter会有一定的存储及内存cache开销[[BR]] 
    1010 
    1111      2、rowkey[[BR]] 
     
    3434 
    3535      可以考虑将column设计到rowkey的方法解决。例如原来的rowkey是uid1,,column是uid2,uid3...。重新设计之后rowkey为<uid1>~<uid2>,<uid1>~<uid3>...当然大家会有疑问,这种方式如何查询,如果要查询uid1下面的所有uid怎么办。这里说明一下hbase并不是只有get一种随机读取的方法。而是含有scan(startkey,endkey)的扫描方法,而这种方法和get的效率相当。需要取得uid1下的记录只需要new Scan("uid1~","uid1~~")即可。 
     36 
     37 
     38  
     39== 程序开发是注意的地方 == 
     40 
     41    (1)、需要判断所求的数据行是否存在时,尽量不要用HTable.exists(final byte [] row) 而用HTable.exists(final byte [] row, final byte[] column)等带列族的方法替代。[[BR]] 
     42 
     43    (2)、不要使用HTable.get(final byte [] row, final byte [] column) == null来判断所求的数据存在,而是用HTable.exists(final byte [] row, final byte[] column)替代[[BR]] 
     44 
     45    (3)、HTable.close()方法少用.因为我遇到过一些很令人费解的错误 (这点没有验证)