Vorrei usare Cassandra per memorizzare le informazioni relative alla sessione. Non ho una vera sessione HTTP: è un protocollo diverso, ma lo stesso concetto.Cassandra come archivio di sessioni sotto carico
Memcached andrebbe bene, ma mi piacerebbe anche mantenere i dati. configurazione
Cassandra:
- non replicato tasto spazio
- sola famiglia Colonna, dove la chiave è l'ID di sessione e ogni colonna all'interno di negozi fila singola chiave/valore - (
Map<String,Set<String,String>>
) - colonna TTL = 10 minuti
- CL scrittura = ONE
- leggere CL = ONE
- 2.000 scrive/s
- 5.000 letture/s esempio
dati:
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},
}
In questo caso la coerenza non è un problema, ma le prestazioni potrebbero essere, in particolare IO disco.
Dato che i dati nella mia sessione si interrompono per poco tempo, vorrei evitare di archiviarli sul disco rigido, ad eccezione del registro di commit.
Ho alcune domande:
- Se la colonna scade nel Memtable prima del lavaggio a SSTable, sarà Cassandra comunque conservare tale colonna nella SSTable (sciacquare a HDD)?
- La replica è disabilitata per il mio spazio chiave, in questo caso non sarebbe necessario memorizzare una colonna scaduta in SSTable, giusto?
- Ogni CF cappello max 10 colonne. In tal caso, abilitare la cache delle righe e disabilitare la cache delle chiavi. Ma mi aspetto che i miei dati siano ancora disponibili in Memtable, in questo caso potrei disabilitare la cache intera, giusto?
- Eventuali suggerimenti di configurazione Cassandra per tale caso d'uso sessione-store sarebbe molto apprezzato :)
Grazie, Maciej
si dice di voler mantenere i dati, ma anche di TTL dopo 10 minuti. – sdolgy
Questo è un processo importante e vorrei assicurarmi che non si rompa –