HBase版本简介
1、前景知识
1、默认情况下,即:如果您未指定显式版本,则在执行时
get,将返回其版本具有最大值的单元格(该单元格可以是也可以不是最新写入的单元格)2、当行键和列键表示为字节时,使用长整数指定版本。通常,此long包含一些时间实例,例如由
java.util.Date.getTime()或返回的时间实例System.currentTimeMillis()
1.1、修改默认行为-方式
1、返回多个版本:Get.setMaxVersions()2、返回除最新版本之后的版本]Get.setTimeRange()
1.2、指定要存储的版本数
1、在创建表时或通过alter命令(通过)指定HColumnDescriptor.DEFAULT_VERSIONS。在HBase 0.96之前,保留的默认版本数是3,但在0.96和更高版本中已更改为1。2、修改列簇中版本数2-1、命令方式-- 最大版本数alter ‘t1′, NAME => ‘f1′, VERSIONS => 5-- 最小版本数alter ‘t1′, NAME => ‘f1′, MIN_VERSIONS => 22-2、API方式-- HColumnDescriptor.java-- 从HBase 0.98.2开始,可以通过hbase.column.max.version在hbase-site.xml中进行设置,为所有新创建的列保留的最大版本数指定一个全局默认值。
2、版本操作
2.1、默认获取示例
1、获取仅检索该行的当前版本1-1、示例public static final byte[] CF = "cf".getBytes();public static final byte[] ATTR = "attr".getBytes();...Get get = new Get(Bytes.toBytes("row1"));Result r = table.get(get);byte[] b = r.getValue(CF, ATTR);
2.2、版本化获取示例
1、获取返回该行的最后3个版本1-1、示例public static final byte[] CF = "cf".getBytes();public static final byte[] ATTR = "attr".getBytes();...Get get = new Get(Bytes.toBytes("row1"));get.setMaxVersions(3);Result r = table.get(get);byte[] b = r.getValue(CF, ATTR);List<Cell> cells = r.getColumnCells(CF, ATTR);
2.3、put操作
默认情况下,系统使用服务器的
currentTimeMillis,但是您可以自己在每个列级别上指定版本(=长整数)
1、隐式版本示例:使用当前时间隐式地对以下Put进行版本控制1-1、示例public static final byte[] CF = "cf".getBytes();public static final byte[] ATTR = "attr".getBytes();...Put put = new Put(Bytes.toBytes(row));put.add(CF, ATTR, Bytes.toBytes( data));table.put(put);2、显示版本示例:具有明确设置的版本时间戳2-1、示例public static final byte[] CF = "cf".getBytes();public static final byte[] ATTR = "attr".getBytes();...Put put = new Put( Bytes.toBytes(row));long explicitTimeInMs = 555; // just an exampleput.add(CF, ATTR, explicitTimeInMs, Bytes.toBytes(data));table.put(put);3、单元格版本示例:使用方法.getCellBuilder()获取已经设置了相关Type和Row的CellBuilder实例3-1、示例public static final byte[] CF = "cf".getBytes();public static final byte[] ATTR = "attr".getBytes();...Put put = new Put(Bytes.toBytes(row));put.add(put.getCellBuilder().setQualifier(ATTR).setFamily(CF).setValue(Bytes.toBytes(data)).build());table.put(put);
2.4、delete操作
1、hbase有三种不同类型的内部删除标记1-1、删除:用于列的特定版本。1-2、删除列:适用于列的所有版本。1-3、删除族:针对特定ColumnFamily的所有列
