2011-10-10 13 views
7

Me gustaría utilizar Cassandra para almacenar información relacionada con la sesión. No tengo una sesión HTTP real, es un protocolo diferente, pero tiene el mismo concepto.Cassandra como sesión almacenar bajo carga pesada

Memcached estaría bien, pero me gustaría, además, persistir los datos. configuración

Cassandra:

  • no replicado espacio clave
  • sola familia de columnas, donde la clave es el identificador de sesión y cada columna dentro de las tiendas de fila única clave/valor - (Map<String,Set<String,String>>)
  • TTL columna = 10
  • minutos
  • escritura CL = UNO
  • leer CL = UNO
  • 2.000 escribe/s
  • 5.000 lecturas ejemplo

Datos/s:

session1:{ // CF row key 
    {prop1:val1, TTL:10 min}, 
    {prop2:val2, TTL:10 min}, 
..... 
    {propXXX:val3, TTL:10 min} 
}, 
session2:{ // CF row key 
    {prop1:val1, TTL:10 min}, 
    {prop2:val2, TTL:10 min}, 
}, 
...... 
sessionXXXX:{ // CF row key 
    {prop1:val1, TTL:10 min}, 
    {prop2:val2, TTL:10 min}, 
} 

En este caso, la consistencia no es un problema, pero el rendimiento puede ser, especialmente S de disco.

Dado que los datos en mi sesión se van por poco tiempo, me gustaría evitar almacenarlos en el disco duro, excepto para el registro de commit.

Tengo algunas preguntas:

  1. columna expira en Memtable antes de enjuagar a SSTable, se Cassandra almacenar todos modos tales columna en SSTable (tirar de la cadena a HDD)?
  2. La replicación está deshabilitada para mi Espacio clave, en este caso no sería necesario almacenar dicha columna caducada en SSTable, ¿no?
  3. Cada CF hat max 10 columnas. En tal caso, habilitaría el caché de filas y desactivaría el caché de claves. Pero estoy esperando que mis datos estén todavía en disponibles en Memtable, en este caso podría deshabilitar toda la memoria caché, ¿verdad?
  4. ¿Alguna pista de configuración Cassandra para tal caso sesión de la tienda utilización sería muy apreciada :)

Gracias, Maciej

+0

dices que quieres persistir los datos, pero también quieres TTL después de 10 minutos. – sdolgy

+0

Este es un proceso importante y me gustaría asegurarme de que no se rompa –

Respuesta

4

Esto es lo que hice - y funciona bien:

  1. Conjunto replication_factor a 1 - indica deshabilitado la replicación
  2. Conjunto gc_grace to 0 - medios eliminar columnas en la primera compactación. Esto está bien, ya que los datos no se replican.
  3. Aumenta el tamaño de la memoria y reduce el tamaño de la memoria caché. Queremos leer datos de memtable y omitir el caché, lavando los datos al disco duro y leyéndolos nuevamente desde el disco duro al caché.
  4. cometer Además de registro se puede desactivar - durable_writes = false

En esta configuración, los datos se leen de memtable y no serán utilizados caché. Memtable puede asignar suficiente montón para mantener mis datos hasta que caduquen o incluso más.

Después de descargar los datos a SSTable, la compactación eliminará inmediatamente las filas caducadas, ya que gc_grace=0.

+4

No puedo ver el punto al hacer esto. Si no estás replicando obtienes lo que ya tienes con memcached. Si el nodo en el que reside su información se pierde, sus datos se pierden. Claro que está en el registro de commit, pero reconstruyendo un nodo en 10 minutos? ¿Me estoy perdiendo de algo? –

1

Teniendo en cuenta su caso de uso si no estoy equivocado que desean tener todo sus pares de valor clave [sessionID => sessionData] en memoria y esos valores caducarán cada 10min [Significa que no desea persistencia].

Entonces, ¿por qué no puedes probar algo como redis, que es una tienda en la memoria.

De Doc:

Redis es una fuente abierta, avanzada almacén de claves-valor. A menudo se lo denomina servidor de estructura de datos , ya que las claves pueden contener cadenas, hash, listas, conjuntos y conjuntos ordenados.

Dado que u no es necesario Redis maestro de replicación arquitectura de esclavos, incluso puede que no le afectará

Redis compatible con TTL también

yo sepa Cassandra es bueno para las filas de grasa de ancho [más columnas menos filas] filas en lugar flacas [ transposición de la anterior]. Tu caso de uso no parece ser así.

Saludos, Tamil

+0

. Ya hemos guardado los archivos de memoria; esto también estaría bien para dicho caso de uso. Pero digamos, que mi proceso es importante y me gustaría asegurarme de que los datos no se perderán durante esos 10 minutos, también podrían ser 30 minutos. –

+0

Todo lo que le interesa es la implementación del registro de compromiso en Cassandra. Espero que esto ayude http://redis.io/topics/persistence, no sé de ninguna manera memcached – Tamil

Cuestiones relacionadas