la respuesta es parcialmente correcta. No es cierto: hbase almacena tres versiones. Prueba a continuación. Es cierto: puede establecer la cantidad máxima de versiones, que hbase devuelve a través
alter 'marketdata', NAME => 'field', VERSIONS => 100
Pero por ahora vamos a suponer, no lo hice cambiar la variable de versión.
Tengo diez entradas en mi hbase, con marcas de tiempo de 0 a 9. La marca de tiempo más reciente es:
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>
Los valores de marca de tiempo de 1 a 5 que se muestran son:
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>
... y cuando configuro mi marca de tiempo final en 10, todavía muestra solo las últimas tres versiones ANTES de esa marca de tiempo y suprime las anteriores:
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>
espere, entonces, ¿cómo puede ver la versión 4,3,2 y 9,8,7 si hbase solo almacena 3 versiones? Tal vez el caparazón solo devuelve 3, por la razón que sea, pero parece que "demostró" que hay más versiones. La respuesta real también es más complicada debido a la forma en que hbase elimina las versiones: realmente no. Si elimina datos de manera explícita, agregará una lápida sepulcral y no verá ningún dato antes de la lápida sepulcral. Todos los otros datos estarán disponibles (y todos los datos serán almacenados) hasta la próxima compactación principal que reescribirá el archivo de la tienda y solo conservará el número correcto de versiones. – David
Hola David, downvoted basado en una respuesta editada por codingFoo. – user1052080
Esta respuesta aún es un poco engañosa. Lo que te estás perdiendo es el problema de la compactación. Cuando HBase almacena un valor, simplemente lo agrega al archivo. Nunca borra datos.Para implementar la eliminación, agregan una lápida sepulcral que básicamente dice que un valor debe ignorarse. Ahora, cuando aparece una compactación, el archivo se volverá a escribir, y ni las versiones antiguas ni las eliminadas se reescribirán en el nuevo archivo. Por lo tanto, hay una ventana de tiempo en la que podrá ver las versiones anteriores, pero esa ventana de tiempo es limitada y no debe confiar en que haya versiones antiguas allí. – David