模式创建

  1. 拥有不同的设计特性
  2. 1.这个表应该有多少个列族
  3. 2.列族使用什么数据
  4. 3.每个列族应该有多少列
  5. 4.列名是什么,尽管列名不必在建表的时候定义,但是读写数据是需要知道的
  6. 5.单元应该存放什么数据
  7. 6.每个单元存储多少个时间版本
  8. 7.行键结构是什么,应该包含什么信息

HBase模式的设计更需要注意两个关键点

  1. 1.Join
  2. HBase中没有Join概念,所以不支持Join操作
  3. 2.Rowkey
  4. Rowkey设计最重要

优化几点:

  1. 1.Rowkey 是以字典顺序从大到小排序
  2. Rowkey = Integer.MAX_VALUE-Rowkey
  3. 2.Rowkey尽量散列Rowkey设计
  4. 散列保证所有的数据都不是在一个Region
  5. a.反转 b.散列 c.取模
  6. 3.RowKey的长度尽量短
  7. 1.存储开销增加。影响存储效率
  8. 2.内存中Rowkey字段过长,会导致内存的利用率jian di

列族定义

  1. HBase 并不能很好的处理两个或者三个以上的列族

可配置的数据块大小

  1. 1.数据块索引存储每个HFile数据块的起始健
  2. 2.数据块大小的设置影响数据块索引的大小
  3. 3.数据块越小,索引越大,从而占用更大的内存空间

数据块缓存

情景:
如果只是执行很多顺序化扫描,会多次使用缓存,并且可以能会滥用缓存,从而把应该放进缓存获取性能提升的数据给排挤出去

  1. 数据块默认是打开的,在新建表或更改表时关闭数据块缓存属性
  2. hbase> create 'mytable',{NAME=>'colfam1',BLOCKCACHE=>'false'}
  3. IN_MEMORY:
  4. hbase> create 'mytable',{NAME=>'colfam1',BLOCKCACHE=>'false',IN_MEMORY=>'true'}

布隆过滤器

数据压缩

  1. hbase(main):002:0>create 'mytable',{NAME => 'colfam1',COMPRESSION => 'SNAPPY'
  2. 注意:数据只在硬盘上压缩的,在内存中或网络传输时是没有压缩的

单元时间版本

时间版本也是在列族级设置的

  1. hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSION => 1}

为列族指定多个属性

  1. hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSIONS => 1,TTL => '18000'}

也可以指定类族存储的最少时间版本数,代码如下:

  1. hbase(main):002:0>create 'mytable',{NAME => 'colfam1',VERSIONS => 5
  2. MIN_VERSIONs => '1'}

生存时间

  1. 用于设置单元格的生存周期

可以在建表时设置TTL

  1. hbase(main):002:2> create 'thetable',{NAME => 'cf1',TTL => '18000'}
  2. 该命令在列族cf1上设置TTL18000s,即5小时,cf1中超过5小时的数据将会在下一次合并时被删除