我们通过行键访问HBase.尽管使用扫描过滤器可以一次性指明大量的键,但是HBase仅仅能够根据行键识别出一行. 优秀的行键设计可以保证良好的HBase性能. 1.行键存在于HBase中的每一个单元格中.如果行键越长,用于存储单元格的I/O开销就会越大.通常我们采用MD5加密的定长键来代替行键. 2.对于组合式行键,每个组件的排序顺序取决于访问模式 如果是一个以主机名和事件类型存储的日志数据库,可能的键值选取方法有以下几种: [主机名][事件类型][时间戳] :适用于访问模式使用主机名和事件类型…
行是由列簇中的列组成.行根据行键依照字典顺序排序. HBase的行使用行键标识,可以使用行键查询整行的数据. 对同一个行键的访问都会落在同样的物理节点上.如果表包含2个列簇,属于两个列簇的文件还是保存在相同的节点上.因此,行键和节点存在一一对应的关系.…
HBase里的4维坐标系统(第一步定位行键   ->   第二步定位列簇  ->  第三步定位列修饰符   ->  第四步定位时间戳) HBase里的4维坐标系统(第一步定位行键   ->   第二步定位列簇  ->  第三步定位列修饰符   ->  第四步定位时间戳) 实际上,HBase的存储值,即一个键值对,是   { row key,column family,column name,timestamp }   ->  value   行键,相当于第一步级索…
在下面这篇博文里,我给各位博客们,分享了创建HBase表,但这远不止打好基础. HBase编程 API入门系列之create(管理端而言)(8) 在关系型数据库里,表的高表和宽表是不存在的.在如HBase这样的NoSQL里,才是存在. HBase里的长表VS宽表VS窄表 在不同场景,结合使用到底是高表还是宽表. 高表有高表的好处,宽表有宽表的优势. 起始行键是1001,结束行键是10010,则可查出如下图框出部分结果. 当然,也可以根据其他的查询条件,来查询.…
有时候啊,HBase表的设计方案通常,还会考虑如下一些因素,当然,这只是考虑范围里的部分呢. 更多的行还是更多的版本?后者使用了HBase自带的功能.但是需要在列簇中定义最大版本数,这样做可能有风险.最好的做法是版本使用多行存储,这需要把时间戳作为行键的一部分,数据检索模式定义了时间戳如何定义为行键的一部分以及应该位于行键的一部分. 更多行或是每行包含更多列?HBase支持每行包含数百万列,并且每一列都可以有列标识. 以行为列的设计?这是一种介于多行和多列的折衷方案.我们可以举一个日志数据库的例…
压缩格式:默认压缩格式是NONE.可选值有GZ.LZO.SNAPPY. 版本数:HBase默认定义为3个版本. 以秒为单位的存活时间TTL:使用对象是行中的列簇,一旦达到过期时间,HBase会删除这些行. 快大小:HBase默认的块大小是64KB,不同于HDFS默认64MB的块大小.原因是HBase需要支持随机访问.一旦找到了行键所在的块,接下来就会定位对应的单元格.使用64KB大小的块扫描速度显然优于64MB大小的块. 内存模式:默认值是false.如果设置为true,HBase会尝试将整个列…
其实啊,我们把HBase想象成一个大的映射关系,再者,本来,HBase存储的数据可以理解为一种key和value的映射关系,但有不是简简单单的映射关系那种,因为比如有各个时间戳版本啊. 通过行键.行键+时间戳或行键+列(列簇:列修饰符),就可以定位特定是数据. HBase是稀疏存储数据的,因此某些列可以是空白的. 列在列簇中依照字典排序.例如,列簇是基础信息或公司域名或水果类.列是基础信息:面貌.基础信息:年龄.公司域名:org.公司域名:edu.水果类:苹果.水果类:香蕉. 表test的概念视…
HBase是一个类似BigTable的分布式数据库, 它是一个稀疏的长期存储的(存在硬盘上).多维度的.排序的映射表.这张表(HBase)的索引是行关键字.列关键字和时间戳.    HBase中的数据都是字符串,没有类型. 用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列.由于HBase是稀疏存储,同一张表里面的每一行数据都可以有截然不同的列. HBase把同一列簇里面的数据存储在同一个目录下,并且HBase的写操作是锁行的,每一行都是一个原子元素,都可以加锁. HBase所有数据库…
列在列簇中依照字典排序.例如,列簇是基础信息或公司域名或水果类.列是基础信息:面貌.基础信息:年龄.公司域名:org.公司域名:edu.水果类:苹果.水果类:香蕉.      列 = 列簇:列修饰符 列根据列簇分组. 列簇的特点: 1.一张表通常有一单独的列簇,而且一张表中的列簇不会超过5个. 2.列簇必须在创建表的时候定义. 3.表的列簇无法改变. 4.每个列簇中的列数是没有限制的. 5.同一列簇下的所有列会保存在一起. 6.列在列簇中是有序的. 7.列在运行时创建. 8.列只有插入后才会存在…
在 HBase里的HRegion 里,谈过,HRegion是按照表名+开始/结束主键,即表名+主键范围来区分的.由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion了. 不过,因为我们有合并和分隔操作,此时,如果正好在执行这些操作的过程中出现死机,那么就可能存在多份表名和开始主键相同的数据,这样的话,只有光靠开始主键就不够了,这就需要通过HBase的元数据信息来区分哪一份才是正确的数据文件.为此,为了区分这样的情况,每个HRegion都有一个'regionId'来标识它的唯一性…