Phoenix Salted Table
来源:互联网 发布:java构造方法语法 编辑:程序博客网 时间:2024/05/16 23:50
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
- Phoenix / HBase中的salted table
- Phoenix 散裂表(Salted Tables)
- Hbase Sql 层 Phoenix 的三个特性Row timestamp, Sequences 和 Salted Tables
- how to mapping phoenix table for hive
- phoenix
- Phoenix
- phoenix
- phoenix local index的使用和join table的原理
- 使用Phoenix 导出csv文件,使用table方式
- 加盐哈希-Salted Password Hashing
- Salted Password Hashing - Doing it Right
- Creamed Spinach with Montreal Salted Herbs
- phoenix create table Order of columns in primary key constraint must match the order in which they'r
- phoenix Singleton
- Phoenix / Tools
- Phoenix 分析
- Phoenix使用指南
- Android之Volley框架源码分析
- oracle创建表空间
- chrome浏览器广告屏蔽插件adblock下载地址
- C# DateTime的 ParseExact和 TryParseExact 使用说明
- DayDayUP_linux运维_将linux默认python升级到所需版本
- Phoenix Salted Table
- 0-1背包问题
- Linux系统启动过程分析
- VS2013环境下调用winsock会出现的几个小问题
- 模板Trait 技术与简述template 元编程
- 怎样增强MyEclipse的智能提示功能
- Dissecting the Camera Matrix
- leetcode 19. Remove Nth Node From End of List-移除链表元素|双指针
- 绑定服务学习