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 => 2
2-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 example
put.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的所有列