la risposta è in parte ragione. Non è vero: hbase STORES tre versioni. Prova vedi sotto. Vero: è possibile impostare la quantità massima di versioni che HBase restituisce attraverso
alter 'marketdata', NAME => 'field', VERSIONS => 100
Ma per ora supponiamo, non ho cambiato la variabile di versione.
ho dieci voci nella mia HBase, con timestamp da 0 a 9. Il timestamp più recente è:
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>
I valori di data e ora da 1 a 5 che vengono visualizzati sono:
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>
... e quando ho impostato il mio timestamp di fine su 10, mostra ancora solo le ultime tre versioni PRIMA di quel timestamp e sopprime i precedenti:
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>
attendere, quindi come si può vedere la versione 4,3,2 e 9,8,7 se hbase sta memorizzando solo 3 versioni? Forse la shell restituisce solo 3, per qualsiasi motivo, ma sembra che tu abbia "provato" che ci sono più versioni. La vera risposta è anche più complicata a causa del modo in cui hbase cancella le versioni: in realtà non lo è. Se elimini esplicitamente i dati, aggiungerà una pietra tombale e non vedrai alcun dato prima della pietra tombale. Tutti gli altri dati saranno disponibili (e tutti i dati saranno archiviati) fino al successivo maggiore compattamento che riscriverà il file di archivio e manterrà solo il numero corretto di versioni. – David
Ciao David, si downvoted basa su una risposta a cura di codingFoo. – user1052080
Questa risposta è ancora un po 'fuorviante. Quello che ti manca è il problema di compattazione. Quando HBase memorizza un valore, lo aggiunge al file. Non cancella mai i dati.Per implementare l'eliminazione, si aggiunge una pietra tombale che dice essenzialmente che un valore dovrebbe essere ignorato. Ora, quando arriva una compattazione, il file verrà riscritto, e né vecchie versioni né versioni cancellate verranno riscritte sul nuovo file. Quindi, c'è una finestra temporale in cui sarà possibile vedere le vecchie versioni, ma quella finestra temporale è limitata e non si dovrebbe fare affidamento sulle versioni precedenti. – David