1. 概念

Phoenix Salted Table是phoenix为了防止hbase表rowkey设计为自增序列而引发热点region读和热点region写而采取的一种表设计手段。通过在创建表的时候指定SALT_BUCKETS来实现pre-split(预分割)。如下表示创建表的时候将表预分割到20个region里面。

CREATE TABLE SALT_TEST (a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 20;

默认情况下,对salted table创建二级索引,二级索引表会随同源表切进行Salted切分,SALT_BUCKETS与源表保持一致。当然,在创建二级索引表的时候也可以自定义SALT_BUCKETS的数量,phoenix没有强制它的数量必须跟源表保持一致。

2. 原理

Phoenix Salted Table的实现原理是在将一个散列取余后的byte值插入到 rowkey的第一个字节里,并通过定义每个region的start key 和 end key 将数据分割到不同的region,以此来防止自增序列引入的热点问题,从而达到平衡HBase集群的读写性能的目的。

salted byte的计算方式大致如下:

hash(rowkey) % SALT_BUCKETS

SALT_BUCKETS的取值为1到256。

默认下salted byte将作为每个region的start key 及 end key,以此分割数据到不同的region,这样能做到具有相同salted byte的数据能够位于同一个region里面。

3. 实践

CREATE TABLE SALT_TEST (a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 4;UPSERT INTO SALT_TEST(a_key, a_col) VALUES('key_abc', 'col_abc');
UPSERT INTO SALT_TEST(a_key, a_col) VALUES('key_ABC', 'col_ABC');
UPSERT INTO SALT_TEST(a_key, a_col) VALUES('key_rowkey01', 'col01');

从phoenix sqlline.py查询数据,没感觉有什么不同:

通过hbase shell 观察验证,观察到phoenix确实是在rowkey的第一个字节插入一个byte字节:

这里我们可以判断phoenix是在写入数据的时候做了处理,在插入数据的时候会计算一个byte字段并将这个字节插入到rowkey的首位置上;而在读取数据的API里面也相应地进行了处理,跳过(skip)第一个字节从而读取到正确的rowkey(注意只有salted table需要这么处理),所以只能通过phoenix接口来获取数据已确保拿到正确的rowkey

Phoenix Salted Table相关推荐

  1. Phoenix / HBase中的salted table

    What are salted tables 为了避免读写HBase表数据时产生hot-spot问题,我们使用Phoenix来创建表时可以采用salted table. salted table可以自 ...

  2. Phoenix创建盐表

    1.Phoenix创建盐表 官网地址:http://phoenix.apache.org/salted.html 创建一个盐表: CREATE TABLE test.test_salt (id VAR ...

  3. phoenix导出csv文件

    原文地址:https://www.cnblogs.com/alexgl2008/articles/12852013.html?share_token=E21CB83E-5BBF-4D90-AF9B-5 ...

  4. Phoenix使用SALT_BUCKETS创建预分区表

    1. 基础知识 Phoenix Salted Table是phoenix为了防止hbase表rowkey设计为自增序列而引发热点region读和热点region写而采取的一种表设计手段.通过在创建表的 ...

  5. Phoenix使用SALT_BUCKETS创建预分区

    1. 基础知识 Phoenix Salted Table是phoenix为了防止hbase表rowkey设计为自增序列而引发热点region读和热点region写而采取的一种表设计手段.通过在创建表的 ...

  6. phoenix的元数据一般存在哪里_Phoenix常用操作记录-阿里云开发者社区

    Apache Phoenix 常用操作 基础知识 1****.****Phoenix 主要技术点 a.将SQL转化为HBase Scan,将结果封装为JDBC Result Set. b.表的元数据保 ...

  7. Phoenix命令及语法

    Phoenix命令及语法 官网 :http://phoenix.apache.org/language/index.html#select 基本命令: 登录相应机器 启动phoenix的客户端 首先s ...

  8. Phoenix二级索引那些事儿(下)

    http://www.icaijing.com/hot/article4940159/ Phoenix二级索引那些事儿(下) 作者:中兴大数据| 发表时间:2015-7-30 03:31:18 索引配 ...

  9. Phoenix创建二级索引

    为什么需要Secondary Index 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询.如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄. ...

最新文章

  1. Android为TV端助力context转换类型
  2. 全球及中国自动驾驶行业应用领域及投资前景展望报告2022-2028年版
  3. vue如何把数组转为json数组_vue.js,_vuejs Ajax取得一个数据json数组,vue.js - phpStudy...
  4. 深入比特币原理(一)——比特币白皮书总结与点评
  5. 华为Mate40 Pro最新渲染图曝光:双孔瀑布屏有戏 再度惊艳
  6. 结合中国古典文化取名 华为意在把传说化为现实奇迹
  7. 将mysql表数据拼接成oracle的insert语句
  8. JAVA 表格组件 + rs.beforeFirst()使用
  9. c语言程序设计实践与案例周讯东,第1章 C语言程序设计导引免费阅读_C程序设计与项目实践免费全文_百度阅读...
  10. 《Android框架揭秘》——2.2节搭建Android平台编译环境
  11. ART中 MIR -- LIR -- 机器码 的流程
  12. 条码扫描模块通过什么编程才能使用呢?
  13. 360浏览器打不开微信的连接服务器,360浏览器打不开网页怎么办-解决360浏览器打不开网页的方法 - 河东软件园...
  14. 如何让搜狗收录方法分享
  15. iOS 上架流程图文详解2022版 (上)
  16. Win10实现截取视频并改为gif
  17. Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe‘ code“
  18. 搜索引擎技术的概要以及相关知识
  19. Excel数据分析:从入门到精通
  20. windows10神州网信政府版“麦克风”权限如何打开?

热门文章

  1. APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (一)
  2. Altium Designer使用简介
  3. 为什么滴滴司机“恨”滴滴?
  4. KM算法(DFS版,优化DFS版,BFS版)
  5. java中实例变量指什么呢?
  6. Stacked Denoising Autoencoders (SDAE)
  7. 小程序服务器token,小程序-登录-token
  8. Python基础(2.3w字,无一废话)---最新更新2021.7.18
  9. 抖音大火的AI虚拟人,画的猫为啥这么丑?
  10. linux用gzip文件怎么打开,linux下怎么解后缀名是gzip的文件?