¿Por qué estoy leyendo muchas de las lápidas de Cassandra en la tabla a pesar de que mi patrón de acceso debe evitar

StackOverflow https://stackoverflow.com//questions/24053860

  •  21-12-2019
  •  | 
  •  

Pregunta

Sé que esta no es la mejor manera de utilizar Cassandra, pero el tipo de mis datos requiere de la lectura de todos los datos de la última semana.Sin embargo, cuando el uso de la Colección de tipos en CQL3, me encontré con ciertas limitaciones que me impide hacer normal rango de fecha en las consultas.

Así que he creado Cassandra (actualmente solo nodo, probablemente más en el futuro) con la siguiente tabla

CREATE TABLE cache (tag text, id int, tags map<text,text>, 
  PRIMARY KEY (tag, id) );
ALTER TABLE cache WITH GC_GRACE_SECONDS = 0;

Estoy insertando con un TTL de una semana para eliminar automáticamente los elementos de la Caché.

He intentado seguir las sugerencias mencionadas en este artículo para evitar la lectura de muchas de las lápidas mediante la selección por "identificador mínimo", que persisten en otros lugares, para evitar la lectura de los datos antiguos:

SELECT * FROM cache WHERE tag = ? AND id >= ?

La identificación es, básicamente, una especie de marca de tiempo que está en constante aumento, es decir,Yo sólo insertar los valores más altos a lo largo del tiempo y constantemente quitar mayores id de la tabla.

Pero todavía me pongo advertencias acerca de los umbrales de ser alcanzado

WARN 08:59:06,286 Read 5001 live and 5702 tombstoned cells in cache (see tombstone_warn_threshold)

Y si no corro el manual de compactación/fregar con regularidad puedo conseguir las excepciones y las consultas de fallar.

Sin embargo, basado en mi entendimiento de los artículos y documentación, yo debería ser el de evitar la mayoría, si no todas las lápidas aquí como me consulta sobre la igualdad de la etiqueta, que permite a Cassandra a sólo buscan esas áreas y yo uso un mínimo de identificación que permite a Cassandra para empezar a leer sólo después de que la mayoría de las lápidas, así que ¿por qué existen todavía lápida advertencias/excepciones reportadas?

¿Fue útil?

Solución

Mapa k/v par es en realidad una columna (nombre, valor y fecha):por lo tanto, si usted es la emisión de una gran cantidad de eliminaciones de elementos de mapa (que expiran por TTL es también el caso), este es el origen de esta advertencia.Porque usted todavía está leyendo completa de mapas (con un montón de lápidas en ellos).También, el valor de TTL en el mapa se aplica en cada elemento de la base.

Segundo, este se multiplica por >= predicado en su consulta de selección.

Si este es el caso, usted debe remodelar su acceso a los datos de patrón a utilizar sólo EQ relaciones en la consulta de selección y bump id más a menudo.Además, este patrón de acceso le permitirá deshacerse de la agrupación en clústeres parte de la CLAVE PRINCIPAL.

Así que, si no se emite un montón de deleciones en el mapa, puede probar a usar tag text, time timeuuid, name text, data text modelo y cortar con precisión por el tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top