Chciałbym użyć Cassandra do przechowywania informacji związanych z sesją. Nie mam prawdziwej sesji HTTP - to inny protokół, ale ta sama koncepcja.Cassandra jako sklep sesji pod dużym obciążeniem
Memcached byłby w porządku, ale chciałbym dodatkowo zachować dane.
Cassandra setup:
- non replikowane klawisz spacji
- jednorodzinnego Kolumna, w której kluczem jest identyfikator sesji i każda kolumna w ciągu sklepach wiersz pojedynczy klucz/wartość - (
Map<String,Set<String,String>>
) - kolumna TTL = 10 minut
- zapisu CL = ONE
- czytać CL = ONE
- 2,000 pisze/s
- 5,000 odsłon/s przykład
danych:
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},
}
W tym przypadku spójności nie jest problemem, ale wydajność może być, zwłaszcza dysk IO.
Ponieważ dane w mojej sesji pozostawiają na krótki czas, chciałbym uniknąć przechowywania na dysku twardym - z wyjątkiem dziennika commit.
Mam kilka pytań:
- Jeśli kolumna wygasa w Memtable przed płukaniem go SSTable będzie Cassandra i tak przechowywać taką kolumnę w SSTable (wylewać go do HDD)?
- Replikacja jest wyłączona dla mojej przestrzeni kluczy, w tym przypadku przechowywanie takiej wygasłej kolumny w SSTable nie byłoby konieczne, prawda?
- Każdy kapelusz CF max 10 kolumn. W takim przypadku włączałbym pamięć podręczną wierszy i wyłączał pamięć podręczną kluczy. Ale oczekuję, że moje dane będą nadal dostępne w wersji Memtable, w tym przypadku mogę wyłączyć całą pamięć podręczną, prawda?
- Wszelkie wskazówki konfiguracyjne Cassandra takiego przypadku sesji sklep stosowanie byłoby bardzo mile widziane :)
Dziękuję Maciej
mówisz, że chcesz zachować dane, ale chcesz je również TTL po 10 minutach. – sdolgy
To jest ważny proces i chciałbym się upewnić, że to się nie zepsuje. –