hbase中是否有最大版本号?

时间:2011-10-21 17:44:32

标签: hbase

如果我想在表格中插入:

row | fam:qualifier | timestamp | value
1 | foo:bar | 12345 | 2
1 | foo:bar | 12346 | 3
1 | foo:bar | 12347 | 2
1 | foo:bar | 12348 | 1
.
.
. 
1 | foo:bar | 123410 | 2

我可以在hbase shell中指定获取特定行的最大版本数,但是当我指定实例'100'时它只返回4个版本... 有没有最大值?

3 个答案:

答案 0 :(得分:14)

它只返回4个版本,因为列族设置为最多存储4个版本。

如果您想存储更多版本,则需要更改CF.使用hbase shell:

hbase> alter 'table_foo', {NAME => 'column_fam_foo', VERSIONS => 100}

最大版本的默认值为1 *:

http://hbase.apache.org/book/schema.versions.html

*似乎最大版本的默认值在某些时候从3更改为1.

答案 1 :(得分:2)

答案是部分正确的。不正确:hbase STORES有三个版本。证明见下文。 True:您可以设置hbase通过

返回的最大版本数量
alter 'marketdata', NAME => 'field', VERSIONS => 100   

但是现在让我们假设,我没有更改版本变量。

我的hbase中有十个条目,时间戳从0到9。 最新的时间戳是:

hbase(main):025:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask'}                                 
COLUMN                             CELL                                                                                   
 field:ask                     timestamp=9,         value=0.9940174211042572                                                  
1 row(s) in 0.0590 seconds

hbase(main):026:0> 

显示的时间戳1到5的值为:

hbase(main):027:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,5], VERSIONS=>5}
COLUMN                             CELL                                                                                   
 field:ask                     timestamp=4, value=0.530618878519702                                                   
 field:ask                     timestamp=3, value=0.051028316270589014                                                
 field:ask                     timestamp=2,     value=0.11949750640509116                                                 
3 row(s) in 0.0130 seconds

hbase(main):028:0>

...当我将结束时间戳设置为10时,它仍然只显示该时间戳之前的最后三个版本并抑制前一个版本:

hbase(main):028:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,10], VERSIONS=>5}
COLUMN                             CELL                                                                                   
 field:ask                     timestamp=9,     value=0.9940174211042572                                                  
 field:ask                     timestamp=8,     value=0.6941263513176372                                                  
 field:ask                     timestamp=7,     value=0.1814043435754933                                                  
3 row(s) in 0.0400 seconds

hbase(main):029:0> 

答案 2 :(得分:0)

版本概念在列族级别上得到严格维护。它是一个可配置的参数。

            columnFamily.setMaxVersions(required version);

一个版本的版本越多,同时从多个HFile读取数据的机会越多。

最好的方法是维护最低版本并将数据封装在一个blob中。