HBase中的TTL與MinVersion的關系


HBase版本:1.3.1

 

TTL(Time-To-Live):每個Cell的數據超時時間(當前時間 - 最后更新的時間)

MinVersion:如果當前存儲的所有時間版本都早於TTL,至少MIN_VERSION個最新版本會保留下來。這樣確保在你的查詢以及數據早於TTL時有結果返回

 

 

===先做一個實驗===

1、創建一個表TEST1

包含兩個列族df、ex,其中列族ex為測試對象:VERSIONS => 4, MIN_VERSIONS => 2, TTL => 3分鍾

2、向該表中生產10條數據

 生產數據的代碼如下所示:

package api;

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.*; public class table_put_sample1 { public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.1.80,192.168.1.81,192.168.1.82"); Connection connection = ConnectionFactory.createConnection(conf); Table table = connection.getTable(TableName.valueOf(constants.TABLE_NAME)); for (int i = 0; i < 10; i++) { Put put = new Put("row01".getBytes()); put.addColumn(constants.COLUMN_FAMILY_DF.getBytes(), "name".getBytes(), random.getName()); put.addColumn(constants.COLUMN_FAMILY_DF.getBytes(), "sex".getBytes(), random.getSex()); put.addColumn(constants.COLUMN_FAMILY_EX.getBytes(), "height".getBytes(), random.getHeight()); put.addColumn(constants.COLUMN_FAMILY_EX.getBytes(), "weight".getBytes(), random.getWeight()); table.put(put); System.out.print("[------]put i=" + i + "\n"); Thread.sleep(1000); } table.close(); connection.close(); } }

 

3、scan這個表看一下結果。

我們插入了10條數據,因為ex列族的最大半版本為4,所以,這里只保存了4個版本的數據。

 

4、過3分鍾之后,再次掃描該表。

雖然從TTL來看,所有的數據都已經過期了,但是由於設置了MIN_VERSIONS => 2的原因,HBase仍然保留了2個版本的數據。以確保可以返回查詢結果。

 

===再做一個實驗===

1、將表的MIN_VERSIONS變更為0

變更命令:alter 'TEST1', {NAME => 'ex', MIN_VERSIONS => '0'}

3、清空TEST1表中的數據,然后再向表中插入10條數據。

《清空》

《插入10條記錄》

查看命令:scan 'TEST1', {VERSIONS => 10}

 

4、過幾分鍾(TTL時間以上)再次scan表。

再次查看一下表發現ex列族的數據都被自動清理掉了。

 

===結論===

MinVersion:used when timeToLive is set

如果HBase中的表設置了TTL的時候,MinVersion才會起作用。

a)MIN_VERSION > 0時:

Cell至少有MIN_VERSION個最新版本會保留下來。這樣確保在你的查詢以及數據早於TTL時有結果返回。

b)MIN_VERSION = 0時:

Cell中的數據超過TTL時間時,全部清空,不保留最低版本。

 

--END--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM