2013-05-14 17 views
5

Cassandra 'ya yeni bir bayan var - Cassandra ile ilgili bilgileri tek bir düğümde arıyordum. Ve birisinin detayları açıklığa kavuşturmasını umuyoruz.Cassandra Commit and Recovery Tek bir Düğümde

Cassandra'yı test ediyorum - bu yüzden tek bir düğümde kurun. Milyonlarca satır eklemek için veri bloğunda stresstool kullanıyorum. Elektrik kesintisi veya sistem kapatılıyorsa ne olur? Cassandra'nın belleğindeki tüm veriler Cassandra yeniden başlatıldığında diske yazılacak mı (sanırım commitlog aracı olarak davranıyor)? Bu süreç ne kadar sürer?

Teşekkürler!

cevap

11
Cassandra'nın taahhüt kütüğü, Cassandra'ya dayanıklı yazılar yazar. Cassandra'ya yazdığınızda, yazma işlemi istemciye kabul edilmeden önce yazma günlüğüne eklenir. Bu, müşterinin başarılı bir yanıt aldığı her yazının, taahhüt günlüğüne yazılmasının garanti edildiği anlamına gelir. Yazma ayrıca, geçerli büyüklükte bir SSTable olarak diske yazılacak olan güncel not defterine de yazılır. Yazma işleminden sonra bu uzun bir zaman olabilir. Ancak, performans günlüğü için derleme günlüğü hemen diskle senkronize edilmez. Varsayılan, (cassandra.yaml dosyasında commitlog_sync_period_in_ms tarafından belirlenen) 10 saniyelik bir süre ile periyodik moddur (cassandra.yaml içindeki commitlog_sync parametresi ile ayarlanır). Bu, taahhüt kaydının her 10 saniyede bir diske senkronize edildiği anlamına gelir. Bu davranışla, sunucu gücü kaybederse 10 saniyeye kadar yazabilirsiniz. Kümenizde birden fazla düğüm varsa ve birden daha büyük bir çoğaltma faktörü kullandıysanız, herhangi bir veriyi kaybetmek için 10 saniye içinde birden çok düğüme güç kaybetmeniz gerekir.

Bu risk penceresi kabul edilemezse, işlem günlüğü için toplu iş modunu kullanabilirsiniz. Bu mod, taahhüt günlüğü diske senkronize edilene kadar istemciye yazılanları kabul etmeyecektir. Zaman penceresi commitlog_sync_batch_window_in_ms tarafından ayarlanır, varsayılan değer 50 ms'dir. Bu, yazma gecikme sürenizi önemli ölçüde artıracak ve muhtemelen üretkenliği azaltacaktır, bu nedenle sadece birkaç kabul edilmiş yazıyı kaybetme maliyeti yüksekse bunu kullanın. Bu modu kullanırken, işlem günlüğünüzü ayrı bir sürücüde saklamak özellikle önemlidir.

Sunucunuzun güç kaybedmesi durumunda, başlangıçta Cassandra, günlüğünü yeniden oluşturmak için taahhüt günlüğünü tekrarlar. Bu işlem çok yazılan ağır sunucularda saniyeler (muhtemelen dakikalar) alacaktır.

Memelilerdeki verilerin diske yazıldığından emin olmak istiyorsanız 'nodetool flush' (bu, her düğüm için çalışır) çalıştırabilirsiniz. Bu, yeni bir SSTable oluşturacak ve temizlenen memurlardaki verilere atıfta bulunan taahhüt kayıtlarını siler.

+3

Detaylı ve çok iyi yazılmış bir açıklama için teşekkür ederiz - şimdi çok daha net.Umarım bu benim gibi diğer yeni başlayanlara da yardımcı olur. – user1680784

+0

'batch' ve 'periyodik' geriye sahip olabilirsiniz ... periyodik varsayılan, kabul yapmak için toplu işlere geçmenizi beklemek, evet? –

+0

@Richard Bu sorunla karşı karşıyayım. Cassandra taahhüt kütüğü bozuk. Baska öneri? Burada bir soru yayınladım: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo

0

SQL * Loader kullanarak Oracle yükleniyor zamanlı veri bir ağ hatası varsa ne nedir

  1. gibi bir şey soruyorsun? Ya da veri aktarılırken Sqoop bir durum nedeniyle işlemeyi durduruyor ne oluyor?

Elektrik kesintisi veya sistem kapatılmadan önce hangi veriler aktarılmakta olursa olsun, aynı kalacaktır.

İkinci soruya gelindiğinde, her ne zaman, memurun alan bittiği zaman, yani, tuşların sayısı belirli bir sınırı aştığında (128 varsayılan) veya zaman süresine ulaştığında (küme saati), sstable içine saklanır. , değişmez alan.

+0

İkinci kısım yardımcı oldu - teşekkürler! – user1680784

İlgili konular