2011-10-10 16 views
7

Oturumla ilgili bilgileri depolamak için Cassandra'yı kullanmak istiyorum. Gerçek bir HTTP oturumum yok - bu farklı bir protokol değil, aynı konsept.Cassandra ağır yük altında oturum deposu olarak

Memnuniyet iyi olurdu, ancak ek olarak verileri devam ettirmek istiyorum.

Cassandra kurulumu:

  • anahtar alanı çoğaltılmış olmayan
  • anahtarı seans numarası ve satır mağaza içinde her bir sütun
  • tek sütun aile, tek bir anahtar/değer - (Map<String,Set<String,String>>)
  • kolon TTL = 10 dakika
  • yazma CL = BİR
  • CL okumak = BİR
  • 2.000 yazıyor/sn
  • 012 bir sorun değildir, bu durumda tutarlı olarak

    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}, 
    } 
    

    , ama performans, özellikle disk GÇ olabilir:

  • 5.000/s

veri örneği okur.

Oturumumdaki veriler kısa süre içinde kaldığından, sabit diskte saklamaktan kaçınmak istiyorum - işlem günlüğü dışında. Sütun SSTable onu yıkamadan önce Memtable içinde sona ererse Cassandra zaten SSTable (HDD'ye Sifonu) böyle sütun depolar,

  1. :

    bazı sorularım var?
  2. Anahtar Alanım için çoğaltma devre dışı bırakılmış, bu durumda böyle bir süresi dolmuş sütunu SSTable'ta depolamak gerekli değil, değil mi?
  3. Her CF şapka maksimum 10 sütun. Böyle bir durumda satır önbelleğini etkinleştirir ve anahtar önbelleğini devre dışı bırakırdım. Ama verilerimin hala Memlekette kullanılabilir olmasını bekliyorum, bu durumda tüm önbelleği devre dışı bırakabilirim, değil mi? Böyle oturum mağaza kullanım durumlarında çok
  4. Herhangi Cassandra yapılandırma ipuçları gerçekten takdir :)

Teşekkür ederim, Maciej

+0

Verileri sürdürmek istediğinizi söylüyorsunuz, ancak 10 dakika sonra TTL'yi de isteyebilirsiniz. – sdolgy

+0

Bu önemli bir işlemdir ve –

cevap

4

ne yaptığını - ve iyi çalışıyor:

  1. Seti replication_factor 1 - vasıta birinci sıkıştırma sütunları silmek -
  2. Set gc_grace to 0 devre dışı çoğaltma anlamına gelir. Bu veriler iyidir, çünkü veriler çoğaltılmamıştır.
  3. Membran boyutunu artırın ve önbellek boyutunu azaltın. Verileri memur olarak okumak ve önbelleği atlamak - verileri HDD'ye akıtmak ve HDD'den tekrar önbelleğe okumak.
  4. Ayrıca günlük devre dışı bırakılabilir işlemek -

yanlış durable_writes = Bu kurulum, veri memtable okunacaktır ve önbellek kullanılmaz edilecektir. Memtable, verinin dolmasına veya daha uzun bir süre saklanmasına yetecek kadar yığın ayırabilir.

Verileri SSTable'a aktardıktan sonra sıkıştırma, gc_grace=0'dan beri zaman aşımına uğramış satırları derhal kaldıracaktır.

+4

Bunu yaparken noktayı göremiyorum. Çoğalmıyorsanız, zaten sahip olduğunuzı, memcached ile elde edersiniz. Verileriniz üzerinde bulunan düğüm açılırsa verileriniz kaybolur. Elbette, taahhütte değil, 10 dakika içinde bir düğümü yeniden oluşturuyor musunuz? Bir şey mi eksik? –

1

sizin kullanım örneğini göz önüne alındığında yanlış değilsem tüm sahip olmak isteyen anahtar değeriniz [sessionID => sessionData] bellekte çiftler ve bu değerler her 10 dakikada bir sona eriyor [Kalıcılık istemediğiniz anlamına gelir]. O zaman neden bellekte bir mağaza olan redis gibi bir şeyi deneyemiyorsunuz? Doc itibaren

:

Redis bir açık kaynak, gelişmiş anahtar-değer mağaza. Anahtarlar, kesitler, listeler, kümeler ve sıralı kümeler içerebildiğinden, bu genellikle bir veri yapı sunucusu olarak anılır.u gerekmez yana

çoğaltma Redis köle mimarisi Hatta

Redis etkiler olmayabilir usta da

AFAIK cassandra geniş yağ satır [Daha fazla sütun daha az satırlar] oldukça sıska satırlar [için iyidir TTL destekler önceki transpoze]. Kullanım durumunuz öyle görünmüyor.

Selamlar, Tamil İşte

+0

'un kırılmadığından emin olmak isteriz. Zaten memcached ettik - bu, bu kullanım durumu için de iyi olurdu. Ancak, sürecimin önemli olduğunu ve emin olmak isterim ki, bu 10 dakika boyunca bu veri kaybolmayacak - 30 dakika da olabilir. –

+0

İlgilendiğiniz her şey, Cassandra'da günlük uygulaması yapmaktır. Umarım bu yardımcı olur http://redis.io/topics/persistence, ben zaten abc memcached bilmiyorum – Tamil

İlgili konular