答えが一部です。そうではありません:hbaseは3つのバージョンを保存します。証明は以下を参照してください。 真:あなたは
alter 'marketdata', NAME => 'field', VERSIONS => 100
を通じてのHBaseが返すバージョンの最大量を設定することができます。しかし、今のは想定してみましょうのために、私はバージョン変数を変更しませんでした。
私はほとんどの現在のタイムスタンプが0から9 にタイムスタンプを持つ私のHBaseで10件のエントリが、持っている:
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に設定すると、そのタイムスタンプより前の最後の3つのバージョンだけが表示され、前のタイムスタンプは表示されません。
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>
お待ちください。hbaseが3つのバージョンしか保存していない場合、バージョン4,3,2および9,8,7はどのように表示されますか?おそらく、シェルは何らかの理由で3を返しているに過ぎませんが、より多くのバージョンがあることを「証明」しているようです。本当の答えは、hbaseがバージョンを削除する方法のために、さらに複雑になります。実際はそうではありません。明示的にデータを削除すると、それは墓石を追加し、墓碑の前にデータは表示されません。ストアファイルを書き換え、正しい数のバージョンのみを保持する次の大きな圧縮まで、他のすべてのデータは使用可能になります(そしてすべてのデータは保存されます)。 – David
こんにちはDavidさん、codingFooの編集されたレスポンスに基づいてダウンしました。 – user1052080
この回答はまだ少し誤解を招いています。あなたが欠けているのは、圧縮問題です。 HBaseが値を格納するとき、HBaseはその値をファイルに追加するだけです。データを削除することはありません。削除を実装するには、基本的に値を無視する必要があることを示す墓石を追加します。現在、コンパクションが行われると、ファイルが書き換えられ、古いバージョンも削除されたバージョンも新しいファイルに書き換えられません。したがって、古いバージョンを見ることができる時間ウィンドウがありますが、その時間ウィンドウは限られていて、そこにある古いバージョンに頼るべきではありません。 – David