和哈希表类比,HBase中的行键类似于哈希表中的键.要构造一个良好的HBase模式,关键之一就是选择一个合适的行键.

1 记录检索

行键是HBase中检索记录所使用的键.HBase记录含有的列在数量上没有限制,但是只能有一个行键.这一点同关系型数据库有所不同,后者的主键可以有多个列组合.既然要为一个记录创建唯一的行键,那么单一的行键就需要包含多种信息.例如,如果一行标识一个订单,那么customer_id,order_id,timestamp可以作为该行的行键.在关系型数据库中,customer_id,order_id,timestamp是三个分开的列,而HBase中三者需要组合形成一个独特的标识符.

在选择行键时需要记住的另外一个点是,但已记录中的get操作是HBase中最快的操作.因此,在设计HBase模式时,用get操作解决大多数常见的数据使用问题,这样会提高处理性能.这可能意味着将大量数据放到单一记录中,比关系型数据库中存放的数据多.这样的设计被称作反向规范化,不同于关系型数据库中常见的规范化设计.比如,关系型数据库可能会将消费者存在一个表中,将其联系方式存在另外一张表中,又将订单存在第三个表中,而订单详情则在另外一个表中.HBase则会设计非常宽的表,即每一个订单记录都包含该订单的所有信息,也包含消费者及其联系方式.单一的get操作就可以检索所有的数据.

2 分布

对于一个给定的表,记录在HBase集群多个Region中的分布方式是由行键决定的.HBase中所有的行键都进行了排序,经过排序的行键按照范围存储在不同的Region中.每个Tegion都固定在一个Region服务器(即集群中的一个节点)上.

行键有一个著名的反模式设计 ,那就是时间戳的使用.在行键中使用时间戳可以将大多数的put和get请求几种在单一的Region上,进而集中在单一的Region服务器上.于是,在某种程度上,HBase不再是一个分布式系统.一般来说,选择行键的最合理标准是让集群的负载分布均匀

3 数据块缓存

数据块缓存是一种最近最少使用的(Lease Recently Used, LRU)缓存,能将数据块缓存到内存中.默认情况下,按照64KB的块大小从磁盘中读取记录,每一个这样的数据块都是一个HBase数据块(HBase Block). 从磁盘中读取的时候,HBase数据块会防止在数据块缓存中.但是,你也可以不讲HBase数据块放到数据块缓存中.之所以要进行缓存,是因为最近访问的数据(以及与这些数据同在一个HBase数据块中的数据)很有可能在不久之后再次被请求访问.但是由于数据块缓存的大小有限制,所以应当谨慎明智的使用它

4 支持扫描

选择合适的行键能够使相关的记录位于同一个Region.这有助于进行范围扫描,因为HBase只需扫描一定数目的Region就可以获取结果.另外,如果行键选择不合适,范围扫描在获取数据时可能需要扫描多个Region服务器,随后还要过滤掉不相关的记录.这样一来,同样的请求就增加了额外的I/O.另外,要记得HBase的扫描速度大约是HDFS的八分之一,减低I/O要求能显著提高性能.与HDFS上的数据存储相比.HBase在这一点上更为明显

5 行键大小

行键的大小将决定工作负载的性能,通常来说.行键越短越好,因为这样可以降低存储消耗,提高读写性能.但是,行键较长时,get和scan的性能更好.因此 在选择时,需要权衡行键的长短.行键越长,压缩编解码在存储行键时需要处理的I/O就越多.同理,列名称越长,需要处理的I/O也越多.所以一般来说,保持列的名称短一些比较好

Tips:可以使用Snappy配置HBase,压缩行键.因为行键按照排序进行存储,所以行键之间的排列比较紧密时.压缩效果较好,这就是不宜将某个属性的哈希作为行键的另一个原因,因为行键的排序是任意的

6 可读性

从开始就接触可读性比较好的行键,如果你不习惯HBase,哪就更应该去这样做.这能让你更为轻松发现和调试问题,也更容易使用HBase操作台.

7 唯一性

因为行键等同于哈希表类比中的键,所以确保行键的唯一性非常重要.如果你选择了一个基于非独特属性的行键,那么应用应该处理这种情况,而且只能通过唯一的行键把数据存入HBase中.

Hadoop-No.7之行键的更多相关文章

  1. Hadoop HBase概念学习系列之优秀行键设计(十六)

    我们通过行键访问HBase.尽管使用扫描过滤器可以一次性指明大量的键,但是HBase仅仅能够根据行键识别出一行. 优秀的行键设计可以保证良好的HBase性能. 1.行键存在于HBase中的每一个单元格 ...

  2. Hadoop HBase概念学习系列之行、行键(十一)

    行是由列簇中的列组成.行根据行键依照字典顺序排序. HBase的行使用行键标识,可以使用行键查询整行的数据. 对同一个行键的访问都会落在同样的物理节点上.如果表包含2个列簇,属于两个列簇的文件还是保存 ...

  3. HBase应用开发回顾与总结系列之三:RowKey行键生成器工具

      所谓RowKey行键生成器,是指通过软件工具制定行键生成策略,并可将策略信息保存成本地策略文件,待需要时再将本地策略文件序列化成行键生成策略对象,传入数据行信息后可自动生成RowKey行键. 那么 ...

  4. HBase应用开发回顾与总结系列之二:RowKey行键设计规范

    2. RowKey行键设计规范 2.1. RowKey四大特性 2.1.1 字符串类型 虽然行键在HBase中是以byte[]字节数组的形式存储的,但是建议在系统开发过程中将其数据类型设置为Strin ...

  5. RowKey设计之单调递增行键/时序数据

    ​在一个集群中,一个导入数据的进程锁住不动,所有的client都在等待一个region (因而也就是一个单个节点),过了一会后,变成了下一个region…​如果使用了单调递增 或者时序的key便会造成 ...

  6. 记一次Hbase的行键过滤器事故问题

    数据总数:746条数据 因为后面需要进行算法合成,而且spark目前对这种算法支持并不好,因此采用代码编写,所以在查询hbase的过程中采用的是java直接查询, 但是为了加快查询速度,我尽可能的使用 ...

  7. HBase行键的设计

    rowkey是行的主键,而且hbase只能用rowkey范围即scan来查找数据.rowkey是以字典排序的.可以巧妙设计行键,比如想通过电影的评价进行排序,可以把评分rate和电影id组合起来,ra ...

  8. HBase按照行键范围删除数据

    #!/bin/bash #TOOL_PATH=$(cd "$(dirname "$0")"; pwd) #TOOL_PATH_TMP=$(cd "$( ...

  9. 架构师必备:HBase行键设计与应用

    首先要回答一个问题,为何要使用HBase? 随着业务不断发展.数据量不断增大,MySQL数据库存在这些问题: MySQL支持的数据量为TB级,不能一直保留历史数据.而HBase支持的数据量为PB级,适 ...

随机推荐

  1. Oooooooo AAAAE 【网络流最小点权覆盖】

    Description “Let the bass kick!O-oooooooooo AAAAE-A-A-I-A-U- JO-oooooooooooo AAE-O-A-A-U-U-A- E-eee- ...

  2. [转帖]传输层安全协议TLS 1.3 RFC 8446使互联网更快、更安全

    传输层安全协议TLS 1.3 RFC 8446使互联网更快.更安全 2018-08-12 11:38:19作者:LINUX人稿源:开源社区 https://ywnz.com/linuxyffq/261 ...

  3. 第一章 Scala基础篇

    目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 ...

  4. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

    MFC中ASSERT作为断言语句,括号内内容为TRUE,继续执行:为FALSE终止执行.之后取得当前窗口的系统菜单,在这个菜单中添加字符串资源IDS_ABOUTBOX和菜单资源IDM_ABOUTBOX ...

  5. Java EE javax.servlet中的ServletContext接口

    ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...

  6. RPC一般指远程过程调用协议

    RPC一般指远程过程调用协议 RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议 ...

  7. hdu 1215 求约数和 唯一分解定理的基本运用

    http://acm.hdu.edu.cn/showproblem.php?pid=1215 题意:求解小于n的所有因子和 利用数论的唯一分解定理. 若n = p1^e1 * p2^e2 * ……*p ...

  8. win10下当前目录右键添加CMD快捷方式

    在某个文件夹下右键打开cmd,这样不用每次都在默认情况下切换目录.无奈win10 1703版本下shift+右键不能打开cmd,只能打开powershell. 首先,在桌面新建一个文本文档. Wind ...

  9. MySQL 5.7.18 zip版本的安装使用方法

    转自:https://www.cnblogs.com/nepulgh/p/7152618.html MySQL 5.7.18 zip版本的安装使用方法 这个版本的MySQL不像那种点击就可以立即安装, ...

  10. 关于IDEA导入依赖问题,阿里云下载不了

    关于阿里云,有部分数据是不能够下载的,就拿ojdbc8-12.2.0.1.0.jar来说 pom.xml <!--Oracle驱动 因为maven仓库下载不了,采用本地导入--> < ...