登 录
注 册
< 大 数 据
Flink
Hadoop
Spark
Hive
HBase
Kafka
其他框架
HBase读写流程
多租户环境
HBase HA
HBase预分区
RowKey设计
HBase优化
HBase数据删除与Split
HBase PythonAPI
HBase存储结构
HBased对接Hive
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
HBase
>>
RowKey设计
RowKey设计
2020-07-03 23:40:36 星期五 阅读:1625
一条数据的唯一标识就是 RowKey,那么这条数据存储于哪个分区,取决于 RowKey 处 于哪个一个预分区的区间内,设计 RowKey 的主要目的 ,就是让数据均匀的分布于所有的 region 中,在一定程度上防止数据倾斜。 ####RowKey设计的三个原则 `散列原则`:预分区设置好后,理想的情况下是数据插入的时候均匀的散落到各个分区里 - 盐值散列:在row key前添加随机数 不能使用时间戳作为row key 可以字符串反转(比如可以把时间戳反转,电话号码反转等) 计算分区号:类似HashMap `唯一性原则`:保证每条数据的唯一性 `长度原则`: - 最大值64KB 推荐长度10-100byte,最好是8的倍数(位数太短,唯一性没法保证;太长则占用大量存储空间) 能短则短,太长会影响HBase的性能(数据量大的时候,row key会占用过多的存储空间和HFile缓存空间) ####散列性 1、生成随机数、hash、散列值 `1001 经过SHA1后变为:dd01903921ea24941c26a48f2cec24e0bb0e8cc7` 2、字符串反转 3、字符串拼接 `a12e|202006013146` `jef4|201939941491` ####分区键与RowKey设计 在生产环境中,RowKey的设计要根据具体的业务进行设计,没有通用的方案。 分区键在生产中一般按照如下方式设置 ``` 001| 002| 003| ... 099| ... 123| ``` 对应的RowKey可设计为 ``` 001_1999999999_xxxxx 002_18888888888_xxxxx 003_17777777777_xxxxx ... 099_16666666666_xxxxx ... 123_19944433224_xxxxx ``` 上面拼接的是电话号码,在实际生产中可根据具体业务来拼接,比如URL等 注意:row拼接使用的是下划线,而不是使用分区键的|,是因为|在ASCII码里的值是最大的(至少比下划线大)。比对于以下分区键 ``` startKey:003| endKey:004| ``` 能够把003开头的rowkey数据全部拦截到该region里,包括003\_开头的,这样就只需要比较rowKey前三位的值即可。