HBase版本简介

1、前景知识

1、默认情况下,即:如果您未指定显式版本,则在执行时get,将返回其版本具有最大值的单元格(该单元格可以是也可以不是最新写入的单元格)

2、当行键和列键表示为字节时,使用长整数指定版本。通常,此long包含一些时间实例,例如由java.util.Date.getTime()或返回的时间实例System.currentTimeMillis()

1.1、修改默认行为-方式

  1. 1、返回多个版本:
  2. Get.setMaxVersions()
  3. 2、返回除最新版本之后的版本]
  4. Get.setTimeRange()

1.2、指定要存储的版本数

  1. 1、在创建表时或通过alter命令(通过)指定HColumnDescriptor.DEFAULT_VERSIONS。在HBase 0.96之前,保留的默认版本数是3,但在0.96和更高版本中已更改为1
  2. 2、修改列簇中版本数
  3. 2-1、命令方式
  4. -- 最大版本数
  5. alter t1′, NAME => f1′, VERSIONS => 5
  6. -- 最小版本数
  7. alter t1′, NAME => f1′, MIN_VERSIONS => 2
  8. 2-2API方式
  9. -- HColumnDescriptor.java
  10. -- HBase 0.98.2开始,可以通过hbase.column.max.versionhbase-site.xml中进行设置,为所有新创建的列保留的最大版本数指定一个全局默认值。

2、版本操作

2.1、默认获取示例

  1. 1、获取仅检索该行的当前版本
  2. 1-1、示例
  3. public static final byte[] CF = "cf".getBytes();
  4. public static final byte[] ATTR = "attr".getBytes();
  5. ...
  6. Get get = new Get(Bytes.toBytes("row1"));
  7. Result r = table.get(get);
  8. byte[] b = r.getValue(CF, ATTR);

2.2、版本化获取示例

  1. 1、获取返回该行的最后3个版本
  2. 1-1、示例
  3. public static final byte[] CF = "cf".getBytes();
  4. public static final byte[] ATTR = "attr".getBytes();
  5. ...
  6. Get get = new Get(Bytes.toBytes("row1"));
  7. get.setMaxVersions(3);
  8. Result r = table.get(get);
  9. byte[] b = r.getValue(CF, ATTR);
  10. List<Cell> cells = r.getColumnCells(CF, ATTR);

2.3、put操作

默认情况下,系统使用服务器的currentTimeMillis,但是您可以自己在每个列级别上指定版本(=长整数)

  1. 1、隐式版本示例:使用当前时间隐式地对以下Put进行版本控制
  2. 1-1、示例
  3. public static final byte[] CF = "cf".getBytes();
  4. public static final byte[] ATTR = "attr".getBytes();
  5. ...
  6. Put put = new Put(Bytes.toBytes(row));
  7. put.add(CF, ATTR, Bytes.toBytes( data));
  8. table.put(put);
  9. 2、显示版本示例:具有明确设置的版本时间戳
  10. 2-1、示例
  11. public static final byte[] CF = "cf".getBytes();
  12. public static final byte[] ATTR = "attr".getBytes();
  13. ...
  14. Put put = new Put( Bytes.toBytes(row));
  15. long explicitTimeInMs = 555; // just an example
  16. put.add(CF, ATTR, explicitTimeInMs, Bytes.toBytes(data));
  17. table.put(put);
  18. 3、单元格版本示例:使用方法.getCellBuilder()获取已经设置了相关TypeRowCellBuilder实例
  19. 3-1、示例
  20. public static final byte[] CF = "cf".getBytes();
  21. public static final byte[] ATTR = "attr".getBytes();
  22. ...
  23. Put put = new Put(Bytes.toBytes(row));
  24. put.add(put.getCellBuilder().setQualifier(ATTR)
  25. .setFamily(CF)
  26. .setValue(Bytes.toBytes(data))
  27. .build());
  28. table.put(put);

2.4、delete操作

  1. 1hbase有三种不同类型的内部删除标记
  2. 1-1、删除:用于列的特定版本。
  3. 1-2、删除列:适用于列的所有版本。
  4. 1-3、删除族:针对特定ColumnFamily的所有列