当前位置:网站首页>Rowkey设计
Rowkey设计
2022-07-29 05:24:00 【a568353087】
HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 Rowkey 范围)所在的Region,然后将查询数据的请求路由到该Region获取数据。HBase的检索支持3种方式:
(1) 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;
(2) 通过Rowkey的range进行scan,即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;
(3) 全表扫描,即直接扫描整张表中所有行记录。
HBASE按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000~2000条记录,不过非key列的查询很慢。
目前操作系统是都是64位系统,内存8字节对齐。控制在16个字节,8字节的整数倍利用操作系统的最佳特性。
(2)MemStore将缓存部分数据到内存,如果Rowkey字段过长内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。因此Rowkey的字节长度越短越好。
(3)目前操作系统是都是64位系统,内存8字节对齐。控制在16个字节,8字节的整数倍利用操作系统的最佳特性。
如果没有散列字段,首字段直接是时间信息将产生所有新数据都在一个 RegionServer上堆积的热点现象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询效率。
通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。
rowkey唯一原则:
必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
加盐
这里所说的加盐不是密码学中的加盐,而是在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。分配的前缀种类数量应该和你想使用数据分散到不同的region的数量一致。加盐之后的rowkey就会根据随机生成的前缀分散到各个region上,以避免热点。
哈希
哈希会使同一行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据
反转
第三种防止热点的方法时反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。
边栏推荐
- FPGA based: moving target detection (supplementary simulation results, available)
- 【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?
- 【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
- Reading papers on false news detection (I): fake news detection using semi supervised graph revolutionary network
- crawl笔记
- CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器
- Ml self study notes 5
- 低功耗蓝牙5.0芯片nrf52832-QFAA
- 倾角传感器精度校准检测
- 基于DAC0832的直流电机控制系统
猜你喜欢

Pytorch's data reading mechanism

Reading papers on fake news detection (2): semi supervised learning and graph neural networks for fake news detection

基于DAC0832的直流电机控制系统

【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?

智能货架安全监测系统

Hal learning notes - Basic timer of 7 timer

SimpleFOC调参1-力矩控制

多线程和并发

Hal library learning notes-12 SPI

Huawei cloud 14 day Hongmeng device development -day3 kernel development
随机推荐
基于51单片机ADC0808的proteus仿真
NOI Online 2022普及组 题解&个人领悟
Ml8 self study notes
进程与进程的概念
Model building in pytorch
SQLyog 安装和配置教程
JUC并发知识点
抽象类以及接口
【软件工程之美 - 专栏笔记】28 | 软件工程师的核心竞争力是什么?(下)
ML10 self study notes SVM
Tf.get in tensorflow_ Detailed explanation of variable() function
QT学习笔记-QtSQL
智能温度控制系统
Huawei cloud 14 day Hongmeng device development -day3 kernel development
SimpleFOC调参1-力矩控制
智慧充电桩系统由什么组成?
基于F407ZGT6的WS2812B彩灯驱动
简洁代码实现pdf转word文档
物联网倾斜监测解决方案
EPS32+Platform+Arduino 跑马灯