模式创建
拥有不同的设计特性
1.这个表应该有多少个列族
2.列族使用什么数据
3.每个列族应该有多少列
4.列名是什么,尽管列名不必在建表的时候定义,但是读写数据是需要知道的
5.单元应该存放什么数据
6.每个单元存储多少个时间版本
7.行键结构是什么,应该包含什么信息
HBase模式的设计更需要注意两个关键点
1.Join
HBase中没有Join概念,所以不支持Join操作
2.Rowkey
Rowkey设计最重要
优化几点:
1.Rowkey 是以字典顺序从大到小排序
Rowkey = Integer.MAX_VALUE-Rowkey
2.Rowkey尽量散列Rowkey设计
散列保证所有的数据都不是在一个Region
a.反转 b.散列 c.取模
3.RowKey的长度尽量短
1.存储开销增加。影响存储效率
2.内存中Rowkey字段过长,会导致内存的利用率jian di
列族定义
HBase 并不能很好的处理两个或者三个以上的列族
可配置的数据块大小
1.数据块索引存储每个HFile数据块的起始健
2.数据块大小的设置影响数据块索引的大小
3.数据块越小,索引越大,从而占用更大的内存空间
数据块缓存
情景:
如果只是执行很多顺序化扫描,会多次使用缓存,并且可以能会滥用缓存,从而把应该放进缓存获取性能提升的数据给排挤出去
数据块默认是打开的,在新建表或更改表时关闭数据块缓存属性
hbase> create 'mytable',{NAME=>'colfam1',BLOCKCACHE=>'false'}
IN_MEMORY:
hbase> create 'mytable',{NAME=>'colfam1',BLOCKCACHE=>'false',IN_MEMORY=>'true'}
布隆过滤器
数据压缩
hbase(main):002:0>create 'mytable',{NAME => 'colfam1',COMPRESSION => 'SNAPPY'
注意:数据只在硬盘上压缩的,在内存中或网络传输时是没有压缩的
单元时间版本
时间版本也是在列族级设置的
hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSION => 1}
为列族指定多个属性
hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSIONS => 1,TTL => '18000'}
也可以指定类族存储的最少时间版本数,代码如下:
hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSIONS => 5
MIN_VERSIONs => '1'}
生存时间
用于设置单元格的生存周期
可以在建表时设置TTL
hbase(main):002:2> create 'thetable',{NAME => 'cf1',TTL => '18000'}
该命令在列族cf1上设置TTL为18000s,即5小时,cf1中超过5小时的数据将会在下一次合并时被删除