开发规范(JAVA部分)
hbase(main)> create 'mytable',{NAME=>'colfam1', VERSIONS=>1}
你可以在同一个create语句里为列族指定多个属性,如下所示: hbase(main)> create
'mytable',{NAME=>'colfam1',VERSIONS=>1,TTL=>'18000'}
你也可以指定列族存储的最少时间版本数,如下所示: hbase(main)> create
'mytable',{NAME=>'colfam1',VERSIONS=>5, MIN_VERSIONS=>'1'}
在列族上同时设定TTL也是迟早有用的。如果当前存储的所有时间版本都早于TTL,至少MIN_VERSION个最新版本会保留下来。这样确保在你的查询以及数据早于TTL时有结果返回。
5.3 ColumnFamily列族设计
列族是针对多个列的分组,分组的依据是不固定的。虽然理论上HBase一个表可以创建多个列族,但是HBase官方建议一个表不要创建多于一个的列族。经过测试,单个列族的写入和读取效率要远远超过多个列族时的情况。在存储时,一个列族会存储成一个StoreFile,多个列族
本文档仅限内部使用,未经双方许可,请勿扩散到第三方。
第 35 页 共 40 页
开发规范(JAVA部分)
对应的多个文件在分裂时会对服务器造成更大的压力。所以建议,一个表创建一个列族。
列族的名称不宜过长,因为在存储时每列都会拼上列族名称,过长的列族将会浪费更多的存储空间。
删除列族时,将同时删除列族下的列及列值数据。
创建表时,最少要创建一个列族。创建表后,可以添加多个列族。 Version版本是针对列族而言的,如果一个表有多个列族,可以为每个列族设置不同的版本数量。譬如,允许列族A最多有5个版本,列族B最多有3个版本。
5.4 Qualifier列设计
HBase与传统的关系数据库一个明显的不同之处,就是创建表时不需要创建列,而是在写入数据时动态地创建列。而且其中的空列并不真正占用存储空间。
列内容被封装成为KeyValue对象,从中可以获取多个信息,如下所示:
//行键
String rowKey = Bytes.toString(kv.getRow()); //列族
String family = Bytes.toString(kv.getFamily()); //列名称
本文档仅限内部使用,未经双方许可,请勿扩散到第三方。
第 36 页 共 40 页
开发规范(JAVA部分)
String qualifier = Bytes.toString(kv.getQualifier()); //列值
String value = Bytes.toString(kv.getValue()); //版本号
long timestamp = kv.getTimestamp();
5.5 版本设计
如果表的某个列族涉及到多版本的问题,则必须在创建列族时指定MaxVersions。虽然,HBase默认的版本数是3,但是如果在创建表时没有明确指定,则仍然只能保存一个版本,因为HBase会认为你不想启用列族的多版本机制。
可以在写入数据时指定版本号,如果不指定版本号,则将采用默认的版本号,即时间戳。
读取数据时,如果没有指定版本号,将只读取最新版本数据,而非最新版本号的数据。
5.6 HBase命名规范
项目 说明 示例 ? 采用英文单词、阿拉伯数字的组合形? 式,其中,单词必须大写,并且首字符必须为英文字符,不能是数字。 根据项目名称构建命名空间:DLQX(电力气象首字母拼接形式),简短明了。 命名空间 本文档仅限内部使用,未经双方许可,请勿扩散到第三方。
第 37 页 共 40 页
开发规范(JAVA部分)
? 不建议用连接符(下划线)拼接多个? 单词,简单语义的可采用单个单词,复杂语义的可采用多个单词的首字母拼接。 不建议过长的命名空间名称,譬如不推荐采用以下形式:USER_INFO_MANAGE等。 ? ? 长度尽量限制在4~8字符之间。 命名空间一般可与项目名称、组织机构名称等保持一致。 ? 采用英文单词、阿拉伯数字、连接符? 符合规范的表名称: (_)的组合形式,其中,单词必须大写,USER_INFO_MANAGE、 并且首字符必须为英文字符,不能是数字,可用连接符拼接多个单词。 表名称 ? ? WEATHER_DATA、 长度尽量限制在8~16字符之间。 T_ELECTRIC_GATHER等。 尽量采用具有明确意义的英文单词,而不建议采用汉字的拼音字母或者拼音首字母组合。 ? 采用英文单词、阿拉伯数字的组合形? 式,其中,单词必须大写,并且首字符符合规范的列族名称: 列族名称 D1、D2、DATA等。 必须为英文字符,不能是数字。 ? 长度尽量限制在1~6字符之间,过? 不推荐的列族名称: 本文档仅限内部使用,未经双方许可,请勿扩散到第三方。
第 38 页 共 40 页
开发规范(JAVA部分)
长的列族名称将占用更多的存储空间。 USER_INFO、D_1等。 ? 采用英文单词、阿拉伯数字、连接符? 符合规范的列名称: (_)的组合形式,其中,单词必须大写,USER_ID、DATA_1、REMARK等。 并且首字符必须为英文字符,不能是数字,可用连接符拼接多个单词。 列名称 ? ? ? 不推荐的列名称: 长度尽量限制在1~16字符之间。 尽量采用具有明确意义的英文单词,而不建议采用汉字的拼音字母或者拼音首字母组合。 UserID、1_DATA等。
本文档仅限内部使用,未经双方许可,请勿扩散到第三方。
第 39 页 共 40 页