2020.06.11
第一步:为Scan 设置Family
Scan s = new Scan();
s.setFilter(filter1);
s.addFamily(Bytes.toBytes("cookie"));
设置Family 速度从1400ms 变成772 ms 依然不够快
第二步:设置扫描范围
一旦可以设置了范围,就快速多了。意味着key要重新设计,带上可以定位的范围即可。
String Start = "expo0";
String End = "expoz";
byte[] startRow = Bytes.toBytes(Start);
byte[] endRow = Bytes.toBytes(End);
Scan s = new Scan(startRow,endRow);
我的key设计这样 exposale6952020-04-01f482c1d0c8dedf133eb1a0e8b45f881f
后面f482c1d0c8dedf133eb1a0e8b45f881f 这一串 完全是乱码也可以扫描
String Start = "expo0";
String End = "expoz";
我设置扫描
String Start = "expo";
String End = "expo";
start 和 End的时候,无效。就是start和end不能相等,所以我必须设置为expo0 和 expoz 来限制后面的字符。(这种设计并不是最好的,最好的设计我还没有学会,有一种是采取时间倒序的手法。)
2020.06.11 两步改完,程序扫描1000万的Hbase从4秒,变成58ms
从源头解决问题,要修改key的结构。锁定的数据越小,效果越好。
附知识:字母顺序表
在ASCII码表的定义中48~57为0到9十个阿拉伯数字、65~90为26个大写英文字母、97~122号为26个小写英文字母。