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个小写英文字母。