(一)优化:
(1)hbase的数据在hbase中是按照行健,列限定符排序的,在行健的设计是,尽量让相同的数据放在一起,提高系统的数据加载速度。
(2)通过多表做缓存提高索引速度
(3)过滤器的使用:在reginserver端进行工作,减少了网络IO,但没有减少磁盘IO(已经优化不少了)
实现:扩展FilterBase()抽象类 调用顺序:
(1)boolean filterRowKey(byte[] buffer,int offset,int length)
(2)ReturnCode filterKeyValue(KeyValue v) 确定keyvlaue要转化的类型
(3)void filterKey(LIst<KeyValue kvs>) 根据ReturnCode对KeyValue进行转化
(4) boolean filterRow() 如果返回true将过滤掉当前的行
(5)boolean filterAllRemaining() 如果已经找到预期的结果则接下去的就不解析了
(4)预装过滤器
(4-1)RowFilter
Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringCOmparator(".*foo'))
(4-2)前缀过滤器
String prefix="a";
Scan scan=new Scan(prefix.getBytes());
Scan.setFIlter(new ProfixFIlter(refix.getBytes()))
(4-3)限定符过滤器
FIlter filter=new QualifierFIlter(CompareFIlter.ComparaOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("colqual20'))
(4-4)值过滤器
FIlter filter=new ValueFIlter(CompareFIlter.ComparaOp.EQUAL,new BinaryComparator(Bytes.toBytes("foo'))
(4-5)时间戳过滤器
List<long> time=new ArrayList();
time.add(100L);
time.add(200L);
Filter filter=new TimestampsFilter(time);
(二)hbase表设计
(1) creat 'xxxx',{NAME=>'XXXX',BLOCKSIZE=>'65536'} 将表的存储快的大小设置为65536 64KB
(2)creat 'xxxx',{NAME=>'XXXX',BLOCKCACHE=>‘false’} 将标的缓存关闭
(3)creat 'xxxx',{NAME=>'XXXX',IN_MEMORY='true'} 激进缓存 在缓存块中拥有较高的有限级
(4)creat 'xxxx',{NAME=>'XXXX',BLOOMTILTER=>‘ROWCOL’} 不隆过滤器,对列族进行反向测试(测试数据快中是否有要的数据)
(5)creat 'xxxx',{NAME=>'XXXX',TTL=>'18000'} 生存时间 早于这时间的数据就会咋下一次大合并的时候删除 (以秒为单位的)
(6)creat 'xxxx',{NAME=>'XXXX',COMPRESSION=>'SNAPPY'} 设置对表进行压缩(hfile) 压缩方法:lzo,snappy,gzip。要所的数据是存放在硬盘上的
(7)creat 'xxxx',{NAME=>'XXXX',VERSION=>'1'} 设置hbase要维护几个和时间版本的数据 1表示维护一个版本
(8)creat 'xxxx',{NAME=>'XXXX',VERSION=>'1',TTL=>'18000'} 可以同时设置多个属性 不限与这两个
(9)creat 'xxxx',{NAME=>'XXXX',VERSION=>'5' MIN_VERSION=>"1"} 如果在列族上设置了TTL,如果当前的数据都遭遇TTL的时间,那么至少有min_verison的最新数据会倍保留