博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Phoenix] 四、加盐表
阅读量:6997 次
发布时间:2019-06-27

本文共 1124 字,大约阅读时间需要 3 分钟。

1. 什么是加盐?

在密码学中,加盐是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。而Phoenix中加盐是指对pk对应的byte数组插入特定的byte数据。

2. 加盐能解决什么问题?

加盐能解决HBASE读写热点问题,例如:单调递增rowkey数据的持续写入,使得负载集中在某一个RegionServer上引起的热点问题。

3. 怎么对表加盐?

在创建表的时候指定属性值:SALT_BUCKETS,其值表示所分buckets(region)数量, 范围是1~256。

CREATE TABLE mytable (my_key VARCHAR PRIMARY KEY, col VARCHAR) SALT_BUCKETS = 8;

4. 加盐的原理是什么?

加盐的过程就是在原来key的基础上增加一个byte作为前缀,计算公式如下:

new_row_key = ((byte) (hash(key) % BUCKETS_NUMBER) + original_key

以上公式中 BUCKETS_NUMBER 代表创建表时指定的 salt buckets 大小,hash 函数的实际计算方式如下:

public static int hash (byte a[], int offset, int length) {    if (a == null)      return 0;    int result = 1;    for (int i = offset; i < offset + length; i++) {        result = 31 * result + a[i];    }    return result;}

5. 一个表“加多少盐合适”?

  • 当可用block cache的大小小于表数据大小时,较优的slated bucket是和region server数量相同,这样可以得到更好的读写性能。
  • 当表的数量很大时,基本上会忽略blcok cache的优化收益,大部分数据仍然需要走磁盘IO。比如对于10个region server集群的大表,可以考虑设计64~128个slat buckets。

6. 加盐时需要注意

  • 创建加盐表时不能再指定split key。
  • 加盐属性不等同于split key, 一个bucket可以对应多个region。
  • 太大的slated buckets会减小range查询的灵活性,甚至降低查询性能。

References

转载地址:http://rsdvl.baihongyu.com/

你可能感兴趣的文章
批处理-字符串操作
查看>>
在IIS中部署和注册WCF服务
查看>>
HDU-1203 I NEED A OFFER!
查看>>
[HNOI2008]明明的烦恼
查看>>
SDOI2010 地精部落
查看>>
JAVA基础数据类型
查看>>
实践作业2 个人项目作业
查看>>
悲催的PHP新型字符串
查看>>
出错Can't convert 'WebElement' object to str implicitly
查看>>
转 maven 教程一 入门 (http://wentao365.iteye.com/blog/903396)
查看>>
log4net使用详解
查看>>
Oracle权限查看(转自javaeye)
查看>>
[pandas] SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
查看>>
J2EE第三课协议Protocol随课笔记
查看>>
JAVA两种XML解析方式 SAX和DOM
查看>>
zw版【转发·台湾nvp系列Delphi例程】HALCON InpaintingCt2
查看>>
POJ2155 Matrix
查看>>
【第二组】项目冲刺(Release版本)第二次每日例会 2017/7/26
查看>>
Docker笔记02-日志平台ELK搭建
查看>>
nginx url rewrite break和last的区别
查看>>