旅游网站对比模板,上海注册公司流程及费用,大埔县住房和城乡规划建设局网站,如何建立网站链接Hbase的Rowkey设计
rowkey设计 # 1#xff09;长度原则# 最大64KB#xff0c;推荐长度10~100 byte# 最好设为8的倍数#xff0c;能短则短#xff0c;rowkey如果太长会影响性能。# 2#xff09;唯一原则#xff1a;rowkey应该具备唯一性# 3#xff09;散列原则…Hbase的Rowkey设计
rowkey设计 # 1长度原则# 最大64KB推荐长度10~100 byte# 最好设为8的倍数能短则短rowkey如果太长会影响性能。# 2唯一原则rowkey应该具备唯一性# 3散列原则# 3-1)盐值散列不能使用时间戳直接作为rowkey# 在rowkey加随机数# 3-2)字符串反转# 时间戳电话号码前面位数相同容易分到一个分区# 3-3)计算分区号HashMap# ASCII有序常用列设计Rowkey放在前面分区设计Rowkey设计以手机号码日期为例
生成分区键以6个分区 分区号0,1,2,3,4,5 分区范围(-∞0),[0,1),[1,2),[2,3),[3,4),[4,5),[5,∞) RowKey前缀0|,1|,2|,3|,4|,5| Rowkey范围(-∞0|),[0|,1|),[1|,2|),[2|,3|),[2|,3|),[4|,5|),[5|,∞) /*** 生成分区 键优化** param regionCount 分区数* return*/private byte[][] getSplitKeys(int regionCount) {int splitKeyCount regionCount - 1;int length Integer.toString(regionCount - 2).length();byte[][] bs new byte[splitKeyCount][];Listbyte[] bsList new ArrayList();for (int i 0; i splitKeyCount; i) {String key NumberUtils.format(i, length) |;
// System.out.println(key);bsList.add(Bytes.toBytes(key));}bsList.toArray(bs);return bs;}生成分区号 通过手机号日期生成分区号得到Rowkey的前缀。 /*** TODO:计算分区号** param tel* param date* return*/protected String getRagionNum(String tel, String date) {//手机号码的后4位String usercode tel.substring(tel.length() - 4);//年月日时分秒年月String yearMonth date.substring(0, 6);int userCodeHash usercode.hashCode();int yearMonthHash yearMonth.hashCode();//crc检验采用异或算法int crc Math.abs(userCodeHash ^ yearMonthHash);int regionNum crc % ValueConstant.REGION_COUNT;int length Integer.toString(ValueConstant.REGION_COUNT - 2).length();return NumberUtils.format(regionNum, length);}Rowkey String rowkey getRagionNum(call1, calltime) _ call1 _ calltime;补零工具类
/*** 将数字格式化为字符串* param num* param length* return*/public static String format(int num,int length){StringBuffer stringBuffer new StringBuffer();for (int i 0; i length; i) {stringBuffer.append(0);}DecimalFormat df new DecimalFormat(stringBuffer.toString());return df.format(num);}