create 'ns1:tb1',{NAME => 'f1'},{NAME => 'f2'},SPLITS => ['01','02','03']
6.8 版本
- 版本设置HBase中的表 , 支持十亿行 * 百万列 * 千版本
- 创建表的时候 , 需要给列簇指定版本 , 并且只能给列簇指定版本 。 create 'ecitem:Beans', {NAME => 'f1', VERSIONS => 3}
- 查询指定版本数的数据# 返回两个版本的数据,不指定版本返回一个最新版本get 'ecitem:Beans','row001',{COLUMN=>'f1:name',VERSIONS=>2}
- 指定时间戳精确查询get 'ecitem:Beans','row001',{COLUMN =>'f1:name',TIMESTAMP=>1543325344120}
- 指定时间戳范围查询get 'ecitem:Beans','row001',{COLUMN => 'f1:name',TIMERANGE=>[1543325325769,1543325344120]}
- TTLTTL是作用于列族的 , 它设置了一个基于时间戳的临界值 ,内部的管理会自动检查TTL值是否达到上限 , 在major合并过程中时间戳被判定为超过TTL的数据会被自动删除 。 TTL参数的单位是秒 , 默认值是Integer.MAX_VALUE , 即2^31-1=2 147 483 647 秒 , 大约68年 。 使用TTL默认值的数据可以理解为永久保存 。
- 建表的时候指定TTL , 默认值为'FOREVER' , 永不过期create 't_task_log',{NAME => 'f', TTL=>'86400'}
- 原生扫描:显示包括删除的数据scan 'table',{RAW=>true,VERSIONS=>10}
- TTL
- 计数器命令incr '','
','',[increment-value>]
ble data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">
- 单计数器单计数器顾名思义就是一次操作只能操作一个计数器 , 用户需要自己设置列 , 方法由HTable类提供
- 多计数器单计数器每一次只允许操作一个计数器 , 如果一行中多个列都是计数器则需要将代码重复编写 , 因此HBase的HTable类提供了另外一个方法 , 可以一次操作同一行的多个计数器
7.2 BloomFilter- BloomFilter的作用HBase利用BloomFilter来提高随机读(Get)的性能 , 对于顺序(Scan)而言 , 设置Bloomfilter是没有作用的(0.92以后 , 如果设置了bloomfilter为ROWCOL , 对于指定了qualiter的Scan有一定的优化) 。
- BloomFilter在HBase中的开销BloomFilter是一个列族级别的配置属性 , 如果在表中设置了BloomFilter , 那么HBase会在生成StoreFile时 , 包含一份BloomFilter 结构的数据 , 称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护 , 所以开启BloomFilter会有一定的存储及内存cache开销 。
- BloomFilter的类型
- ROW:根据KeyValue中的row来过滤storefile 。
- ROWCOL:根据KeyValue中的row+qualifier来过滤storefile 。
- 总结
- 任何类型的get(基于rowkey或row+col)Bloom Filter的优化都能生效 , 关键是get的类型要匹配Bloom Filter的类型
- 基于row的scan是没办法走Bloom Filter的 。 因为Bloom Filter是需要事先知道过滤项的 。 对于顺序scan是没有事先办法知道rowkey的 。 而get是指明了rowkey所以可以用Bloom Filter , scan指明column同理 。
- row+col+qualify的scan可以去掉不存在此qualify的storefile , 也算是不错的优化了 , 而且指明qualify也能减少流量 , 因此scan尽量指明qualify
7.3 RowKey设计- RowKey设计原则
- 长度原则
- Rowkey 是一个二进制码流 , Rowkey 的长度被很多开发者建议说设计在 10~100 个字节 , 不过建议是越短越好 , 不要超过 16 个字节 , 存为byte[]字节数组 , 一般设计成定长的 。