HBase rowkey设计原则
来源:互联网 发布:正在设置您的mac要多久 编辑:程序博客网 时间:2024/06/11 22:07
Hbase是三维有序存储的,通过rowkey、column key(column family和qualifier)、timestamp这三个维度可以对数据进行快速定位。
1、通过get方式,指定rowkey获取唯一一条记录。
2、通过scan方式,setStartRow和setEndRow参数进行范围匹配。
3、全表扫描。
rowkey特性
1. 字符串类型
HBase中rowkey存储是byte[],但是Java中建议设为String确保通用性,其他类型(如Long)数据类型的长度将限制rowkey 的长度
2. 有明确意义
3. 有序
4. 定长
有序的基础是定长,如果长度不一致,排序会发生变化。如20170101>2017040
rowkey设计原则
1. 唯一原则
2. 长度原则
rowkey是一个二进制码流,可以是任意字符串,最大长度64kb,以byte[]形式保存,一般保存成定长。
建议越短越好,不要超过16个字节,原因如下:
(1)数据的的持久化HFile中是按照KeyValue存储,如果rowkey过长会影响HFile的存储效率;
(2)MemStore将将缓存部分数据到内存,如果rowkey过长,内存的有效利用率就会降低,系统不能缓存更多的的数据,检索效率就会降低。
(3)目前系统一般都是64位的,内存8字节对齐,控制在16个字节,是8字节的整数倍利用了系统最佳特性。
3. 散列原则
必须在设计上保证其唯一性,rowkey是按照字段顺序排序存储的,因此,设计设计rowkey的时候要利用排序的特点,将经常读取的数据存到一块,将最新可能会被访问的数据存到一块。
rowkey顺序排序存储的好处:优化scan操作,可以将相关的行和可能会被同时读取的行存在临近位置,便于scan。rowkey设计不好就会造成热点。
热点:大量client同时访问集群的一个节点(或极少数节点)。访问可能是读或者写。大量访问热点region所在的节点,会导致机器超出承受能力,引起性能下降或不可用。也会影响同一个RegionServer上的其他region。
避免热点的方法:
加盐
给rowkey前加随机数。
哈希
同样是加前缀,可以使负载分散到整个集群,但是读却是可以预测的。
反转
反转固定长度或数字格式的rowkey(比如说timestamp),这样使rowkey中经常改变的部分(最没意义的部分)放在最前面,可以生成随机的rowkey,但是牺牲了有序性。
★每条记录的RowKey,每个字段都需要填充到相同长度。
- HBase RowKey设计原则
- Hbase rowkey 设计原则
- Hbase rowkey 设计原则
- Hbase RowKey设计原则
- HBase rowkey设计原则
- HBase RowKey的设计原则
- HBase的RowKey设计原则
- HBase的RowKey设计原则
- HBase的RowKey设计原则
- HBase的RowKey设计原则
- HBase RowKey的设计原则
- HBase RowKey的设计原则
- HBase的RowKey设计原则
- HBase 中RowKey的设计原则
- HBase RowKey设计原则(全面)
- HBase学习之五:HBase的RowKey设计原则
- HBase学习之HBase的RowKey设计原则
- HBase学习之五:HBase的RowKey设计原则
- 【hdu 1875】 畅通工程再续
- 数组
- web笔记一:浅谈web服务器和应用服务器
- ES6之promise
- mybatis
- HBase rowkey设计原则
- 利用顺序栈实现括号匹配
- 判断两个字符串是否互为旋转词 Python版
- 接口初始化和类初始化区别
- caffe源码之心得
- 洛谷P2722 总分 Score Inflation
- 为Android控件添加一个边框的简单方法
- ELK研究(一):elasticsearch java api接口操作ES集群 ---TransportClient的使用介绍 bulk批量提交数据
- NOIP注意事项